/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/
import * as $protobuf from "protobufjs/minimal";

// Common aliases
const $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;

// Exported root namespace
const $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {});

export const web_proto = $root.web_proto = (() => {

    /**
     * Namespace web_proto.
     * @exports web_proto
     * @namespace
     */
    const web_proto = {};

    /**
     * Cmd enum.
     * @name web_proto.Cmd
     * @enum {number}
     * @property {number} SEND=0 SEND value
     * @property {number} PING=1 PING value
     * @property {number} PONG=2 PONG value
     * @property {number} UPGRADE_REQ=3 UPGRADE_REQ value
     * @property {number} UPGRADE_RESP=4 UPGRADE_RESP value
     * @property {number} NEW_USER_CLIENT_RESP=5 NEW_USER_CLIENT_RESP value
     * @property {number} USER_LOGIN_RESP=6 USER_LOGIN_RESP value
     * @property {number} USER_INFO_RESP=7 USER_INFO_RESP value
     * @property {number} USER_LEVEL_UPGRADE_RESP=8 USER_LEVEL_UPGRADE_RESP value
     * @property {number} USER_EXIT_RESP=9 USER_EXIT_RESP value
     * @property {number} USER_BALANCE_REQ=10 USER_BALANCE_REQ value
     * @property {number} USER_BALANCE_RESP=11 USER_BALANCE_RESP value
     * @property {number} USER_ADD_BALANCE_RESP=12 USER_ADD_BALANCE_RESP value
     * @property {number} CURRENCY_RATE_RESP=13 CURRENCY_RATE_RESP value
     */
    web_proto.Cmd = (function() {
        const valuesById = {}, values = Object.create(valuesById);
        values[valuesById[0] = "SEND"] = 0;
        values[valuesById[1] = "PING"] = 1;
        values[valuesById[2] = "PONG"] = 2;
        values[valuesById[3] = "UPGRADE_REQ"] = 3;
        values[valuesById[4] = "UPGRADE_RESP"] = 4;
        values[valuesById[5] = "NEW_USER_CLIENT_RESP"] = 5;
        values[valuesById[6] = "USER_LOGIN_RESP"] = 6;
        values[valuesById[7] = "USER_INFO_RESP"] = 7;
        values[valuesById[8] = "USER_LEVEL_UPGRADE_RESP"] = 8;
        values[valuesById[9] = "USER_EXIT_RESP"] = 9;
        values[valuesById[10] = "USER_BALANCE_REQ"] = 10;
        values[valuesById[11] = "USER_BALANCE_RESP"] = 11;
        values[valuesById[12] = "USER_ADD_BALANCE_RESP"] = 12;
        values[valuesById[13] = "CURRENCY_RATE_RESP"] = 13;
        return values;
    })();

    /**
     * UpgradeType enum.
     * @name web_proto.UpgradeType
     * @enum {number}
     * @property {number} None=0 None value
     * @property {number} Optional=1 Optional value
     * @property {number} Force=2 Force value
     */
    web_proto.UpgradeType = (function() {
        const valuesById = {}, values = Object.create(valuesById);
        values[valuesById[0] = "None"] = 0;
        values[valuesById[1] = "Optional"] = 1;
        values[valuesById[2] = "Force"] = 2;
        return values;
    })();

    web_proto.UpgradeResp = (function() {

        /**
         * Properties of an UpgradeResp.
         * @memberof web_proto
         * @interface IUpgradeResp
         * @property {web_proto.UpgradeType|null} [Type] UpgradeResp Type
         */

        /**
         * Constructs a new UpgradeResp.
         * @memberof web_proto
         * @classdesc Represents an UpgradeResp.
         * @implements IUpgradeResp
         * @constructor
         * @param {web_proto.IUpgradeResp=} [properties] Properties to set
         */
        function UpgradeResp(properties) {
            if (properties)
                for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * UpgradeResp Type.
         * @member {web_proto.UpgradeType} Type
         * @memberof web_proto.UpgradeResp
         * @instance
         */
        UpgradeResp.prototype.Type = 0;

        /**
         * Creates a new UpgradeResp instance using the specified properties.
         * @function create
         * @memberof web_proto.UpgradeResp
         * @static
         * @param {web_proto.IUpgradeResp=} [properties] Properties to set
         * @returns {web_proto.UpgradeResp} UpgradeResp instance
         */
        UpgradeResp.create = function create(properties) {
            return new UpgradeResp(properties);
        };

        /**
         * Encodes the specified UpgradeResp message. Does not implicitly {@link web_proto.UpgradeResp.verify|verify} messages.
         * @function encode
         * @memberof web_proto.UpgradeResp
         * @static
         * @param {web_proto.IUpgradeResp} message UpgradeResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        UpgradeResp.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.Type != null && Object.hasOwnProperty.call(message, "Type"))
                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Type);
            return writer;
        };

        /**
         * Encodes the specified UpgradeResp message, length delimited. Does not implicitly {@link web_proto.UpgradeResp.verify|verify} messages.
         * @function encodeDelimited
         * @memberof web_proto.UpgradeResp
         * @static
         * @param {web_proto.IUpgradeResp} message UpgradeResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        UpgradeResp.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes an UpgradeResp message from the specified reader or buffer.
         * @function decode
         * @memberof web_proto.UpgradeResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {web_proto.UpgradeResp} UpgradeResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        UpgradeResp.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            let end = length === undefined ? reader.len : reader.pos + length, message = new $root.web_proto.UpgradeResp();
            while (reader.pos < end) {
                let tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.Type = reader.int32();
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes an UpgradeResp message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof web_proto.UpgradeResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {web_proto.UpgradeResp} UpgradeResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        UpgradeResp.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies an UpgradeResp message.
         * @function verify
         * @memberof web_proto.UpgradeResp
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        UpgradeResp.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.Type != null && message.hasOwnProperty("Type"))
                switch (message.Type) {
                default:
                    return "Type: enum value expected";
                case 0:
                case 1:
                case 2:
                    break;
                }
            return null;
        };

        /**
         * Creates an UpgradeResp message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof web_proto.UpgradeResp
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {web_proto.UpgradeResp} UpgradeResp
         */
        UpgradeResp.fromObject = function fromObject(object) {
            if (object instanceof $root.web_proto.UpgradeResp)
                return object;
            let message = new $root.web_proto.UpgradeResp();
            switch (object.Type) {
            default:
                if (typeof object.Type === "number") {
                    message.Type = object.Type;
                    break;
                }
                break;
            case "None":
            case 0:
                message.Type = 0;
                break;
            case "Optional":
            case 1:
                message.Type = 1;
                break;
            case "Force":
            case 2:
                message.Type = 2;
                break;
            }
            return message;
        };

        /**
         * Creates a plain object from an UpgradeResp message. Also converts values to other types if specified.
         * @function toObject
         * @memberof web_proto.UpgradeResp
         * @static
         * @param {web_proto.UpgradeResp} message UpgradeResp
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        UpgradeResp.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            let object = {};
            if (options.defaults)
                object.Type = options.enums === String ? "None" : 0;
            if (message.Type != null && message.hasOwnProperty("Type"))
                object.Type = options.enums === String ? $root.web_proto.UpgradeType[message.Type] === undefined ? message.Type : $root.web_proto.UpgradeType[message.Type] : message.Type;
            return object;
        };

        /**
         * Converts this UpgradeResp to JSON.
         * @function toJSON
         * @memberof web_proto.UpgradeResp
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        UpgradeResp.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for UpgradeResp
         * @function getTypeUrl
         * @memberof web_proto.UpgradeResp
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        UpgradeResp.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/web_proto.UpgradeResp";
        };

        return UpgradeResp;
    })();

    web_proto.MessageBody = (function() {

        /**
         * Properties of a MessageBody.
         * @memberof web_proto
         * @interface IMessageBody
         * @property {web_proto.Cmd|null} [Cmd] MessageBody Cmd
         * @property {string|null} [MsgID] MessageBody MsgID
         * @property {number|Long|null} [AppID] MessageBody AppID
         * @property {number|Long|null} [Timestamp] MessageBody Timestamp
         * @property {number|Long|null} [Code] MessageBody Code
         * @property {string|null} [Msg] MessageBody Msg
         * @property {Uint8Array|null} [Data] MessageBody Data
         */

        /**
         * Constructs a new MessageBody.
         * @memberof web_proto
         * @classdesc Represents a MessageBody.
         * @implements IMessageBody
         * @constructor
         * @param {web_proto.IMessageBody=} [properties] Properties to set
         */
        function MessageBody(properties) {
            if (properties)
                for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * MessageBody Cmd.
         * @member {web_proto.Cmd} Cmd
         * @memberof web_proto.MessageBody
         * @instance
         */
        MessageBody.prototype.Cmd = 0;

        /**
         * MessageBody MsgID.
         * @member {string} MsgID
         * @memberof web_proto.MessageBody
         * @instance
         */
        MessageBody.prototype.MsgID = "";

        /**
         * MessageBody AppID.
         * @member {number|Long} AppID
         * @memberof web_proto.MessageBody
         * @instance
         */
        MessageBody.prototype.AppID = $util.Long ? $util.Long.fromBits(0,0,false) : 0;

        /**
         * MessageBody Timestamp.
         * @member {number|Long} Timestamp
         * @memberof web_proto.MessageBody
         * @instance
         */
        MessageBody.prototype.Timestamp = $util.Long ? $util.Long.fromBits(0,0,false) : 0;

        /**
         * MessageBody Code.
         * @member {number|Long} Code
         * @memberof web_proto.MessageBody
         * @instance
         */
        MessageBody.prototype.Code = $util.Long ? $util.Long.fromBits(0,0,false) : 0;

        /**
         * MessageBody Msg.
         * @member {string} Msg
         * @memberof web_proto.MessageBody
         * @instance
         */
        MessageBody.prototype.Msg = "";

        /**
         * MessageBody Data.
         * @member {Uint8Array} Data
         * @memberof web_proto.MessageBody
         * @instance
         */
        MessageBody.prototype.Data = $util.newBuffer([]);

        /**
         * Creates a new MessageBody instance using the specified properties.
         * @function create
         * @memberof web_proto.MessageBody
         * @static
         * @param {web_proto.IMessageBody=} [properties] Properties to set
         * @returns {web_proto.MessageBody} MessageBody instance
         */
        MessageBody.create = function create(properties) {
            return new MessageBody(properties);
        };

        /**
         * Encodes the specified MessageBody message. Does not implicitly {@link web_proto.MessageBody.verify|verify} messages.
         * @function encode
         * @memberof web_proto.MessageBody
         * @static
         * @param {web_proto.IMessageBody} message MessageBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MessageBody.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.Cmd != null && Object.hasOwnProperty.call(message, "Cmd"))
                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Cmd);
            if (message.MsgID != null && Object.hasOwnProperty.call(message, "MsgID"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.MsgID);
            if (message.AppID != null && Object.hasOwnProperty.call(message, "AppID"))
                writer.uint32(/* id 3, wireType 0 =*/24).int64(message.AppID);
            if (message.Timestamp != null && Object.hasOwnProperty.call(message, "Timestamp"))
                writer.uint32(/* id 4, wireType 0 =*/32).int64(message.Timestamp);
            if (message.Code != null && Object.hasOwnProperty.call(message, "Code"))
                writer.uint32(/* id 5, wireType 0 =*/40).int64(message.Code);
            if (message.Msg != null && Object.hasOwnProperty.call(message, "Msg"))
                writer.uint32(/* id 6, wireType 2 =*/50).string(message.Msg);
            if (message.Data != null && Object.hasOwnProperty.call(message, "Data"))
                writer.uint32(/* id 7, wireType 2 =*/58).bytes(message.Data);
            return writer;
        };

        /**
         * Encodes the specified MessageBody message, length delimited. Does not implicitly {@link web_proto.MessageBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof web_proto.MessageBody
         * @static
         * @param {web_proto.IMessageBody} message MessageBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MessageBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a MessageBody message from the specified reader or buffer.
         * @function decode
         * @memberof web_proto.MessageBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {web_proto.MessageBody} MessageBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MessageBody.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            let end = length === undefined ? reader.len : reader.pos + length, message = new $root.web_proto.MessageBody();
            while (reader.pos < end) {
                let tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.Cmd = reader.int32();
                        break;
                    }
                case 2: {
                        message.MsgID = reader.string();
                        break;
                    }
                case 3: {
                        message.AppID = reader.int64();
                        break;
                    }
                case 4: {
                        message.Timestamp = reader.int64();
                        break;
                    }
                case 5: {
                        message.Code = reader.int64();
                        break;
                    }
                case 6: {
                        message.Msg = reader.string();
                        break;
                    }
                case 7: {
                        message.Data = reader.bytes();
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a MessageBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof web_proto.MessageBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {web_proto.MessageBody} MessageBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MessageBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a MessageBody message.
         * @function verify
         * @memberof web_proto.MessageBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        MessageBody.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.Cmd != null && message.hasOwnProperty("Cmd"))
                switch (message.Cmd) {
                default:
                    return "Cmd: enum value expected";
                case 0:
                case 1:
                case 2:
                case 3:
                case 4:
                case 5:
                case 6:
                case 7:
                case 8:
                case 9:
                case 10:
                case 11:
                case 12:
                case 13:
                    break;
                }
            if (message.MsgID != null && message.hasOwnProperty("MsgID"))
                if (!$util.isString(message.MsgID))
                    return "MsgID: string expected";
            if (message.AppID != null && message.hasOwnProperty("AppID"))
                if (!$util.isInteger(message.AppID) && !(message.AppID && $util.isInteger(message.AppID.low) && $util.isInteger(message.AppID.high)))
                    return "AppID: integer|Long expected";
            if (message.Timestamp != null && message.hasOwnProperty("Timestamp"))
                if (!$util.isInteger(message.Timestamp) && !(message.Timestamp && $util.isInteger(message.Timestamp.low) && $util.isInteger(message.Timestamp.high)))
                    return "Timestamp: integer|Long expected";
            if (message.Code != null && message.hasOwnProperty("Code"))
                if (!$util.isInteger(message.Code) && !(message.Code && $util.isInteger(message.Code.low) && $util.isInteger(message.Code.high)))
                    return "Code: integer|Long expected";
            if (message.Msg != null && message.hasOwnProperty("Msg"))
                if (!$util.isString(message.Msg))
                    return "Msg: string expected";
            if (message.Data != null && message.hasOwnProperty("Data"))
                if (!(message.Data && typeof message.Data.length === "number" || $util.isString(message.Data)))
                    return "Data: buffer expected";
            return null;
        };

        /**
         * Creates a MessageBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof web_proto.MessageBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {web_proto.MessageBody} MessageBody
         */
        MessageBody.fromObject = function fromObject(object) {
            if (object instanceof $root.web_proto.MessageBody)
                return object;
            let message = new $root.web_proto.MessageBody();
            switch (object.Cmd) {
            default:
                if (typeof object.Cmd === "number") {
                    message.Cmd = object.Cmd;
                    break;
                }
                break;
            case "SEND":
            case 0:
                message.Cmd = 0;
                break;
            case "PING":
            case 1:
                message.Cmd = 1;
                break;
            case "PONG":
            case 2:
                message.Cmd = 2;
                break;
            case "UPGRADE_REQ":
            case 3:
                message.Cmd = 3;
                break;
            case "UPGRADE_RESP":
            case 4:
                message.Cmd = 4;
                break;
            case "NEW_USER_CLIENT_RESP":
            case 5:
                message.Cmd = 5;
                break;
            case "USER_LOGIN_RESP":
            case 6:
                message.Cmd = 6;
                break;
            case "USER_INFO_RESP":
            case 7:
                message.Cmd = 7;
                break;
            case "USER_LEVEL_UPGRADE_RESP":
            case 8:
                message.Cmd = 8;
                break;
            case "USER_EXIT_RESP":
            case 9:
                message.Cmd = 9;
                break;
            case "USER_BALANCE_REQ":
            case 10:
                message.Cmd = 10;
                break;
            case "USER_BALANCE_RESP":
            case 11:
                message.Cmd = 11;
                break;
            case "USER_ADD_BALANCE_RESP":
            case 12:
                message.Cmd = 12;
                break;
            case "CURRENCY_RATE_RESP":
            case 13:
                message.Cmd = 13;
                break;
            }
            if (object.MsgID != null)
                message.MsgID = String(object.MsgID);
            if (object.AppID != null)
                if ($util.Long)
                    (message.AppID = $util.Long.fromValue(object.AppID)).unsigned = false;
                else if (typeof object.AppID === "string")
                    message.AppID = parseInt(object.AppID, 10);
                else if (typeof object.AppID === "number")
                    message.AppID = object.AppID;
                else if (typeof object.AppID === "object")
                    message.AppID = new $util.LongBits(object.AppID.low >>> 0, object.AppID.high >>> 0).toNumber();
            if (object.Timestamp != null)
                if ($util.Long)
                    (message.Timestamp = $util.Long.fromValue(object.Timestamp)).unsigned = false;
                else if (typeof object.Timestamp === "string")
                    message.Timestamp = parseInt(object.Timestamp, 10);
                else if (typeof object.Timestamp === "number")
                    message.Timestamp = object.Timestamp;
                else if (typeof object.Timestamp === "object")
                    message.Timestamp = new $util.LongBits(object.Timestamp.low >>> 0, object.Timestamp.high >>> 0).toNumber();
            if (object.Code != null)
                if ($util.Long)
                    (message.Code = $util.Long.fromValue(object.Code)).unsigned = false;
                else if (typeof object.Code === "string")
                    message.Code = parseInt(object.Code, 10);
                else if (typeof object.Code === "number")
                    message.Code = object.Code;
                else if (typeof object.Code === "object")
                    message.Code = new $util.LongBits(object.Code.low >>> 0, object.Code.high >>> 0).toNumber();
            if (object.Msg != null)
                message.Msg = String(object.Msg);
            if (object.Data != null)
                if (typeof object.Data === "string")
                    $util.base64.decode(object.Data, message.Data = $util.newBuffer($util.base64.length(object.Data)), 0);
                else if (object.Data.length >= 0)
                    message.Data = object.Data;
            return message;
        };

        /**
         * Creates a plain object from a MessageBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof web_proto.MessageBody
         * @static
         * @param {web_proto.MessageBody} message MessageBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        MessageBody.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            let object = {};
            if (options.defaults) {
                object.Cmd = options.enums === String ? "SEND" : 0;
                object.MsgID = "";
                if ($util.Long) {
                    let long = new $util.Long(0, 0, false);
                    object.AppID = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.AppID = options.longs === String ? "0" : 0;
                if ($util.Long) {
                    let long = new $util.Long(0, 0, false);
                    object.Timestamp = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.Timestamp = options.longs === String ? "0" : 0;
                if ($util.Long) {
                    let long = new $util.Long(0, 0, false);
                    object.Code = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.Code = options.longs === String ? "0" : 0;
                object.Msg = "";
                if (options.bytes === String)
                    object.Data = "";
                else {
                    object.Data = [];
                    if (options.bytes !== Array)
                        object.Data = $util.newBuffer(object.Data);
                }
            }
            if (message.Cmd != null && message.hasOwnProperty("Cmd"))
                object.Cmd = options.enums === String ? $root.web_proto.Cmd[message.Cmd] === undefined ? message.Cmd : $root.web_proto.Cmd[message.Cmd] : message.Cmd;
            if (message.MsgID != null && message.hasOwnProperty("MsgID"))
                object.MsgID = message.MsgID;
            if (message.AppID != null && message.hasOwnProperty("AppID"))
                if (typeof message.AppID === "number")
                    object.AppID = options.longs === String ? String(message.AppID) : message.AppID;
                else
                    object.AppID = options.longs === String ? $util.Long.prototype.toString.call(message.AppID) : options.longs === Number ? new $util.LongBits(message.AppID.low >>> 0, message.AppID.high >>> 0).toNumber() : message.AppID;
            if (message.Timestamp != null && message.hasOwnProperty("Timestamp"))
                if (typeof message.Timestamp === "number")
                    object.Timestamp = options.longs === String ? String(message.Timestamp) : message.Timestamp;
                else
                    object.Timestamp = options.longs === String ? $util.Long.prototype.toString.call(message.Timestamp) : options.longs === Number ? new $util.LongBits(message.Timestamp.low >>> 0, message.Timestamp.high >>> 0).toNumber() : message.Timestamp;
            if (message.Code != null && message.hasOwnProperty("Code"))
                if (typeof message.Code === "number")
                    object.Code = options.longs === String ? String(message.Code) : message.Code;
                else
                    object.Code = options.longs === String ? $util.Long.prototype.toString.call(message.Code) : options.longs === Number ? new $util.LongBits(message.Code.low >>> 0, message.Code.high >>> 0).toNumber() : message.Code;
            if (message.Msg != null && message.hasOwnProperty("Msg"))
                object.Msg = message.Msg;
            if (message.Data != null && message.hasOwnProperty("Data"))
                object.Data = options.bytes === String ? $util.base64.encode(message.Data, 0, message.Data.length) : options.bytes === Array ? Array.prototype.slice.call(message.Data) : message.Data;
            return object;
        };

        /**
         * Converts this MessageBody to JSON.
         * @function toJSON
         * @memberof web_proto.MessageBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        MessageBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for MessageBody
         * @function getTypeUrl
         * @memberof web_proto.MessageBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        MessageBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/web_proto.MessageBody";
        };

        return MessageBody;
    })();

    web_proto.BetResultResp = (function() {

        /**
         * Properties of a BetResultResp.
         * @memberof web_proto
         * @interface IBetResultResp
         * @property {web_proto.IUserDetail|null} [User] BetResultResp User
         * @property {string|null} [OrderNo] BetResultResp OrderNo
         * @property {string|null} [Currency] BetResultResp Currency
         * @property {string|null} [BetAmount] BetResultResp BetAmount
         * @property {string|null} [RewardAmount] BetResultResp RewardAmount
         * @property {string|null} [ProfitAmount] BetResultResp ProfitAmount
         * @property {number|null} [Odds] BetResultResp Odds
         * @property {number|Long|null} [PrizeStatus] BetResultResp PrizeStatus
         * @property {number|Long|null} [Time] BetResultResp Time
         */

        /**
         * Constructs a new BetResultResp.
         * @memberof web_proto
         * @classdesc Represents a BetResultResp.
         * @implements IBetResultResp
         * @constructor
         * @param {web_proto.IBetResultResp=} [properties] Properties to set
         */
        function BetResultResp(properties) {
            if (properties)
                for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * BetResultResp User.
         * @member {web_proto.IUserDetail|null|undefined} User
         * @memberof web_proto.BetResultResp
         * @instance
         */
        BetResultResp.prototype.User = null;

        /**
         * BetResultResp OrderNo.
         * @member {string} OrderNo
         * @memberof web_proto.BetResultResp
         * @instance
         */
        BetResultResp.prototype.OrderNo = "";

        /**
         * BetResultResp Currency.
         * @member {string} Currency
         * @memberof web_proto.BetResultResp
         * @instance
         */
        BetResultResp.prototype.Currency = "";

        /**
         * BetResultResp BetAmount.
         * @member {string} BetAmount
         * @memberof web_proto.BetResultResp
         * @instance
         */
        BetResultResp.prototype.BetAmount = "";

        /**
         * BetResultResp RewardAmount.
         * @member {string} RewardAmount
         * @memberof web_proto.BetResultResp
         * @instance
         */
        BetResultResp.prototype.RewardAmount = "";

        /**
         * BetResultResp ProfitAmount.
         * @member {string} ProfitAmount
         * @memberof web_proto.BetResultResp
         * @instance
         */
        BetResultResp.prototype.ProfitAmount = "";

        /**
         * BetResultResp Odds.
         * @member {number} Odds
         * @memberof web_proto.BetResultResp
         * @instance
         */
        BetResultResp.prototype.Odds = 0;

        /**
         * BetResultResp PrizeStatus.
         * @member {number|Long} PrizeStatus
         * @memberof web_proto.BetResultResp
         * @instance
         */
        BetResultResp.prototype.PrizeStatus = $util.Long ? $util.Long.fromBits(0,0,false) : 0;

        /**
         * BetResultResp Time.
         * @member {number|Long} Time
         * @memberof web_proto.BetResultResp
         * @instance
         */
        BetResultResp.prototype.Time = $util.Long ? $util.Long.fromBits(0,0,false) : 0;

        /**
         * Creates a new BetResultResp instance using the specified properties.
         * @function create
         * @memberof web_proto.BetResultResp
         * @static
         * @param {web_proto.IBetResultResp=} [properties] Properties to set
         * @returns {web_proto.BetResultResp} BetResultResp instance
         */
        BetResultResp.create = function create(properties) {
            return new BetResultResp(properties);
        };

        /**
         * Encodes the specified BetResultResp message. Does not implicitly {@link web_proto.BetResultResp.verify|verify} messages.
         * @function encode
         * @memberof web_proto.BetResultResp
         * @static
         * @param {web_proto.IBetResultResp} message BetResultResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        BetResultResp.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.User != null && Object.hasOwnProperty.call(message, "User"))
                $root.web_proto.UserDetail.encode(message.User, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
            if (message.OrderNo != null && Object.hasOwnProperty.call(message, "OrderNo"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.OrderNo);
            if (message.Currency != null && Object.hasOwnProperty.call(message, "Currency"))
                writer.uint32(/* id 3, wireType 2 =*/26).string(message.Currency);
            if (message.BetAmount != null && Object.hasOwnProperty.call(message, "BetAmount"))
                writer.uint32(/* id 4, wireType 2 =*/34).string(message.BetAmount);
            if (message.RewardAmount != null && Object.hasOwnProperty.call(message, "RewardAmount"))
                writer.uint32(/* id 5, wireType 2 =*/42).string(message.RewardAmount);
            if (message.ProfitAmount != null && Object.hasOwnProperty.call(message, "ProfitAmount"))
                writer.uint32(/* id 6, wireType 2 =*/50).string(message.ProfitAmount);
            if (message.Odds != null && Object.hasOwnProperty.call(message, "Odds"))
                writer.uint32(/* id 7, wireType 1 =*/57).double(message.Odds);
            if (message.PrizeStatus != null && Object.hasOwnProperty.call(message, "PrizeStatus"))
                writer.uint32(/* id 8, wireType 0 =*/64).int64(message.PrizeStatus);
            if (message.Time != null && Object.hasOwnProperty.call(message, "Time"))
                writer.uint32(/* id 9, wireType 0 =*/72).int64(message.Time);
            return writer;
        };

        /**
         * Encodes the specified BetResultResp message, length delimited. Does not implicitly {@link web_proto.BetResultResp.verify|verify} messages.
         * @function encodeDelimited
         * @memberof web_proto.BetResultResp
         * @static
         * @param {web_proto.IBetResultResp} message BetResultResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        BetResultResp.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a BetResultResp message from the specified reader or buffer.
         * @function decode
         * @memberof web_proto.BetResultResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {web_proto.BetResultResp} BetResultResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        BetResultResp.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            let end = length === undefined ? reader.len : reader.pos + length, message = new $root.web_proto.BetResultResp();
            while (reader.pos < end) {
                let tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.User = $root.web_proto.UserDetail.decode(reader, reader.uint32());
                        break;
                    }
                case 2: {
                        message.OrderNo = reader.string();
                        break;
                    }
                case 3: {
                        message.Currency = reader.string();
                        break;
                    }
                case 4: {
                        message.BetAmount = reader.string();
                        break;
                    }
                case 5: {
                        message.RewardAmount = reader.string();
                        break;
                    }
                case 6: {
                        message.ProfitAmount = reader.string();
                        break;
                    }
                case 7: {
                        message.Odds = reader.double();
                        break;
                    }
                case 8: {
                        message.PrizeStatus = reader.int64();
                        break;
                    }
                case 9: {
                        message.Time = reader.int64();
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a BetResultResp message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof web_proto.BetResultResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {web_proto.BetResultResp} BetResultResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        BetResultResp.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a BetResultResp message.
         * @function verify
         * @memberof web_proto.BetResultResp
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        BetResultResp.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.User != null && message.hasOwnProperty("User")) {
                let error = $root.web_proto.UserDetail.verify(message.User);
                if (error)
                    return "User." + error;
            }
            if (message.OrderNo != null && message.hasOwnProperty("OrderNo"))
                if (!$util.isString(message.OrderNo))
                    return "OrderNo: string expected";
            if (message.Currency != null && message.hasOwnProperty("Currency"))
                if (!$util.isString(message.Currency))
                    return "Currency: string expected";
            if (message.BetAmount != null && message.hasOwnProperty("BetAmount"))
                if (!$util.isString(message.BetAmount))
                    return "BetAmount: string expected";
            if (message.RewardAmount != null && message.hasOwnProperty("RewardAmount"))
                if (!$util.isString(message.RewardAmount))
                    return "RewardAmount: string expected";
            if (message.ProfitAmount != null && message.hasOwnProperty("ProfitAmount"))
                if (!$util.isString(message.ProfitAmount))
                    return "ProfitAmount: string expected";
            if (message.Odds != null && message.hasOwnProperty("Odds"))
                if (typeof message.Odds !== "number")
                    return "Odds: number expected";
            if (message.PrizeStatus != null && message.hasOwnProperty("PrizeStatus"))
                if (!$util.isInteger(message.PrizeStatus) && !(message.PrizeStatus && $util.isInteger(message.PrizeStatus.low) && $util.isInteger(message.PrizeStatus.high)))
                    return "PrizeStatus: integer|Long expected";
            if (message.Time != null && message.hasOwnProperty("Time"))
                if (!$util.isInteger(message.Time) && !(message.Time && $util.isInteger(message.Time.low) && $util.isInteger(message.Time.high)))
                    return "Time: integer|Long expected";
            return null;
        };

        /**
         * Creates a BetResultResp message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof web_proto.BetResultResp
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {web_proto.BetResultResp} BetResultResp
         */
        BetResultResp.fromObject = function fromObject(object) {
            if (object instanceof $root.web_proto.BetResultResp)
                return object;
            let message = new $root.web_proto.BetResultResp();
            if (object.User != null) {
                if (typeof object.User !== "object")
                    throw TypeError(".web_proto.BetResultResp.User: object expected");
                message.User = $root.web_proto.UserDetail.fromObject(object.User);
            }
            if (object.OrderNo != null)
                message.OrderNo = String(object.OrderNo);
            if (object.Currency != null)
                message.Currency = String(object.Currency);
            if (object.BetAmount != null)
                message.BetAmount = String(object.BetAmount);
            if (object.RewardAmount != null)
                message.RewardAmount = String(object.RewardAmount);
            if (object.ProfitAmount != null)
                message.ProfitAmount = String(object.ProfitAmount);
            if (object.Odds != null)
                message.Odds = Number(object.Odds);
            if (object.PrizeStatus != null)
                if ($util.Long)
                    (message.PrizeStatus = $util.Long.fromValue(object.PrizeStatus)).unsigned = false;
                else if (typeof object.PrizeStatus === "string")
                    message.PrizeStatus = parseInt(object.PrizeStatus, 10);
                else if (typeof object.PrizeStatus === "number")
                    message.PrizeStatus = object.PrizeStatus;
                else if (typeof object.PrizeStatus === "object")
                    message.PrizeStatus = new $util.LongBits(object.PrizeStatus.low >>> 0, object.PrizeStatus.high >>> 0).toNumber();
            if (object.Time != null)
                if ($util.Long)
                    (message.Time = $util.Long.fromValue(object.Time)).unsigned = false;
                else if (typeof object.Time === "string")
                    message.Time = parseInt(object.Time, 10);
                else if (typeof object.Time === "number")
                    message.Time = object.Time;
                else if (typeof object.Time === "object")
                    message.Time = new $util.LongBits(object.Time.low >>> 0, object.Time.high >>> 0).toNumber();
            return message;
        };

        /**
         * Creates a plain object from a BetResultResp message. Also converts values to other types if specified.
         * @function toObject
         * @memberof web_proto.BetResultResp
         * @static
         * @param {web_proto.BetResultResp} message BetResultResp
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        BetResultResp.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            let object = {};
            if (options.defaults) {
                object.User = null;
                object.OrderNo = "";
                object.Currency = "";
                object.BetAmount = "";
                object.RewardAmount = "";
                object.ProfitAmount = "";
                object.Odds = 0;
                if ($util.Long) {
                    let long = new $util.Long(0, 0, false);
                    object.PrizeStatus = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.PrizeStatus = options.longs === String ? "0" : 0;
                if ($util.Long) {
                    let long = new $util.Long(0, 0, false);
                    object.Time = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.Time = options.longs === String ? "0" : 0;
            }
            if (message.User != null && message.hasOwnProperty("User"))
                object.User = $root.web_proto.UserDetail.toObject(message.User, options);
            if (message.OrderNo != null && message.hasOwnProperty("OrderNo"))
                object.OrderNo = message.OrderNo;
            if (message.Currency != null && message.hasOwnProperty("Currency"))
                object.Currency = message.Currency;
            if (message.BetAmount != null && message.hasOwnProperty("BetAmount"))
                object.BetAmount = message.BetAmount;
            if (message.RewardAmount != null && message.hasOwnProperty("RewardAmount"))
                object.RewardAmount = message.RewardAmount;
            if (message.ProfitAmount != null && message.hasOwnProperty("ProfitAmount"))
                object.ProfitAmount = message.ProfitAmount;
            if (message.Odds != null && message.hasOwnProperty("Odds"))
                object.Odds = options.json && !isFinite(message.Odds) ? String(message.Odds) : message.Odds;
            if (message.PrizeStatus != null && message.hasOwnProperty("PrizeStatus"))
                if (typeof message.PrizeStatus === "number")
                    object.PrizeStatus = options.longs === String ? String(message.PrizeStatus) : message.PrizeStatus;
                else
                    object.PrizeStatus = options.longs === String ? $util.Long.prototype.toString.call(message.PrizeStatus) : options.longs === Number ? new $util.LongBits(message.PrizeStatus.low >>> 0, message.PrizeStatus.high >>> 0).toNumber() : message.PrizeStatus;
            if (message.Time != null && message.hasOwnProperty("Time"))
                if (typeof message.Time === "number")
                    object.Time = options.longs === String ? String(message.Time) : message.Time;
                else
                    object.Time = options.longs === String ? $util.Long.prototype.toString.call(message.Time) : options.longs === Number ? new $util.LongBits(message.Time.low >>> 0, message.Time.high >>> 0).toNumber() : message.Time;
            return object;
        };

        /**
         * Converts this BetResultResp to JSON.
         * @function toJSON
         * @memberof web_proto.BetResultResp
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        BetResultResp.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for BetResultResp
         * @function getTypeUrl
         * @memberof web_proto.BetResultResp
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        BetResultResp.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/web_proto.BetResultResp";
        };

        return BetResultResp;
    })();

    web_proto.BalanceReq = (function() {

        /**
         * Properties of a BalanceReq.
         * @memberof web_proto
         * @interface IBalanceReq
         * @property {string|null} [Currency] BalanceReq Currency
         */

        /**
         * Constructs a new BalanceReq.
         * @memberof web_proto
         * @classdesc Represents a BalanceReq.
         * @implements IBalanceReq
         * @constructor
         * @param {web_proto.IBalanceReq=} [properties] Properties to set
         */
        function BalanceReq(properties) {
            if (properties)
                for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * BalanceReq Currency.
         * @member {string} Currency
         * @memberof web_proto.BalanceReq
         * @instance
         */
        BalanceReq.prototype.Currency = "";

        /**
         * Creates a new BalanceReq instance using the specified properties.
         * @function create
         * @memberof web_proto.BalanceReq
         * @static
         * @param {web_proto.IBalanceReq=} [properties] Properties to set
         * @returns {web_proto.BalanceReq} BalanceReq instance
         */
        BalanceReq.create = function create(properties) {
            return new BalanceReq(properties);
        };

        /**
         * Encodes the specified BalanceReq message. Does not implicitly {@link web_proto.BalanceReq.verify|verify} messages.
         * @function encode
         * @memberof web_proto.BalanceReq
         * @static
         * @param {web_proto.IBalanceReq} message BalanceReq message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        BalanceReq.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.Currency != null && Object.hasOwnProperty.call(message, "Currency"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.Currency);
            return writer;
        };

        /**
         * Encodes the specified BalanceReq message, length delimited. Does not implicitly {@link web_proto.BalanceReq.verify|verify} messages.
         * @function encodeDelimited
         * @memberof web_proto.BalanceReq
         * @static
         * @param {web_proto.IBalanceReq} message BalanceReq message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        BalanceReq.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a BalanceReq message from the specified reader or buffer.
         * @function decode
         * @memberof web_proto.BalanceReq
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {web_proto.BalanceReq} BalanceReq
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        BalanceReq.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            let end = length === undefined ? reader.len : reader.pos + length, message = new $root.web_proto.BalanceReq();
            while (reader.pos < end) {
                let tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.Currency = reader.string();
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a BalanceReq message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof web_proto.BalanceReq
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {web_proto.BalanceReq} BalanceReq
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        BalanceReq.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a BalanceReq message.
         * @function verify
         * @memberof web_proto.BalanceReq
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        BalanceReq.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.Currency != null && message.hasOwnProperty("Currency"))
                if (!$util.isString(message.Currency))
                    return "Currency: string expected";
            return null;
        };

        /**
         * Creates a BalanceReq message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof web_proto.BalanceReq
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {web_proto.BalanceReq} BalanceReq
         */
        BalanceReq.fromObject = function fromObject(object) {
            if (object instanceof $root.web_proto.BalanceReq)
                return object;
            let message = new $root.web_proto.BalanceReq();
            if (object.Currency != null)
                message.Currency = String(object.Currency);
            return message;
        };

        /**
         * Creates a plain object from a BalanceReq message. Also converts values to other types if specified.
         * @function toObject
         * @memberof web_proto.BalanceReq
         * @static
         * @param {web_proto.BalanceReq} message BalanceReq
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        BalanceReq.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            let object = {};
            if (options.defaults)
                object.Currency = "";
            if (message.Currency != null && message.hasOwnProperty("Currency"))
                object.Currency = message.Currency;
            return object;
        };

        /**
         * Converts this BalanceReq to JSON.
         * @function toJSON
         * @memberof web_proto.BalanceReq
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        BalanceReq.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for BalanceReq
         * @function getTypeUrl
         * @memberof web_proto.BalanceReq
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        BalanceReq.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/web_proto.BalanceReq";
        };

        return BalanceReq;
    })();

    web_proto.BalanceResp = (function() {

        /**
         * Properties of a BalanceResp.
         * @memberof web_proto
         * @interface IBalanceResp
         * @property {string|null} [Currency] BalanceResp Currency
         * @property {string|null} [Amount] BalanceResp Amount
         * @property {string|null} [Balance] BalanceResp Balance
         * @property {string|null} [BonusBalance] BalanceResp BonusBalance
         */

        /**
         * Constructs a new BalanceResp.
         * @memberof web_proto
         * @classdesc Represents a BalanceResp.
         * @implements IBalanceResp
         * @constructor
         * @param {web_proto.IBalanceResp=} [properties] Properties to set
         */
        function BalanceResp(properties) {
            if (properties)
                for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * BalanceResp Currency.
         * @member {string} Currency
         * @memberof web_proto.BalanceResp
         * @instance
         */
        BalanceResp.prototype.Currency = "";

        /**
         * BalanceResp Amount.
         * @member {string} Amount
         * @memberof web_proto.BalanceResp
         * @instance
         */
        BalanceResp.prototype.Amount = "";

        /**
         * BalanceResp Balance.
         * @member {string} Balance
         * @memberof web_proto.BalanceResp
         * @instance
         */
        BalanceResp.prototype.Balance = "";

        /**
         * BalanceResp BonusBalance.
         * @member {string} BonusBalance
         * @memberof web_proto.BalanceResp
         * @instance
         */
        BalanceResp.prototype.BonusBalance = "";

        /**
         * Creates a new BalanceResp instance using the specified properties.
         * @function create
         * @memberof web_proto.BalanceResp
         * @static
         * @param {web_proto.IBalanceResp=} [properties] Properties to set
         * @returns {web_proto.BalanceResp} BalanceResp instance
         */
        BalanceResp.create = function create(properties) {
            return new BalanceResp(properties);
        };

        /**
         * Encodes the specified BalanceResp message. Does not implicitly {@link web_proto.BalanceResp.verify|verify} messages.
         * @function encode
         * @memberof web_proto.BalanceResp
         * @static
         * @param {web_proto.IBalanceResp} message BalanceResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        BalanceResp.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.Currency != null && Object.hasOwnProperty.call(message, "Currency"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.Currency);
            if (message.Amount != null && Object.hasOwnProperty.call(message, "Amount"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.Amount);
            if (message.Balance != null && Object.hasOwnProperty.call(message, "Balance"))
                writer.uint32(/* id 3, wireType 2 =*/26).string(message.Balance);
            if (message.BonusBalance != null && Object.hasOwnProperty.call(message, "BonusBalance"))
                writer.uint32(/* id 4, wireType 2 =*/34).string(message.BonusBalance);
            return writer;
        };

        /**
         * Encodes the specified BalanceResp message, length delimited. Does not implicitly {@link web_proto.BalanceResp.verify|verify} messages.
         * @function encodeDelimited
         * @memberof web_proto.BalanceResp
         * @static
         * @param {web_proto.IBalanceResp} message BalanceResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        BalanceResp.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a BalanceResp message from the specified reader or buffer.
         * @function decode
         * @memberof web_proto.BalanceResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {web_proto.BalanceResp} BalanceResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        BalanceResp.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            let end = length === undefined ? reader.len : reader.pos + length, message = new $root.web_proto.BalanceResp();
            while (reader.pos < end) {
                let tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.Currency = reader.string();
                        break;
                    }
                case 2: {
                        message.Amount = reader.string();
                        break;
                    }
                case 3: {
                        message.Balance = reader.string();
                        break;
                    }
                case 4: {
                        message.BonusBalance = reader.string();
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a BalanceResp message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof web_proto.BalanceResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {web_proto.BalanceResp} BalanceResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        BalanceResp.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a BalanceResp message.
         * @function verify
         * @memberof web_proto.BalanceResp
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        BalanceResp.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.Currency != null && message.hasOwnProperty("Currency"))
                if (!$util.isString(message.Currency))
                    return "Currency: string expected";
            if (message.Amount != null && message.hasOwnProperty("Amount"))
                if (!$util.isString(message.Amount))
                    return "Amount: string expected";
            if (message.Balance != null && message.hasOwnProperty("Balance"))
                if (!$util.isString(message.Balance))
                    return "Balance: string expected";
            if (message.BonusBalance != null && message.hasOwnProperty("BonusBalance"))
                if (!$util.isString(message.BonusBalance))
                    return "BonusBalance: string expected";
            return null;
        };

        /**
         * Creates a BalanceResp message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof web_proto.BalanceResp
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {web_proto.BalanceResp} BalanceResp
         */
        BalanceResp.fromObject = function fromObject(object) {
            if (object instanceof $root.web_proto.BalanceResp)
                return object;
            let message = new $root.web_proto.BalanceResp();
            if (object.Currency != null)
                message.Currency = String(object.Currency);
            if (object.Amount != null)
                message.Amount = String(object.Amount);
            if (object.Balance != null)
                message.Balance = String(object.Balance);
            if (object.BonusBalance != null)
                message.BonusBalance = String(object.BonusBalance);
            return message;
        };

        /**
         * Creates a plain object from a BalanceResp message. Also converts values to other types if specified.
         * @function toObject
         * @memberof web_proto.BalanceResp
         * @static
         * @param {web_proto.BalanceResp} message BalanceResp
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        BalanceResp.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            let object = {};
            if (options.defaults) {
                object.Currency = "";
                object.Amount = "";
                object.Balance = "";
                object.BonusBalance = "";
            }
            if (message.Currency != null && message.hasOwnProperty("Currency"))
                object.Currency = message.Currency;
            if (message.Amount != null && message.hasOwnProperty("Amount"))
                object.Amount = message.Amount;
            if (message.Balance != null && message.hasOwnProperty("Balance"))
                object.Balance = message.Balance;
            if (message.BonusBalance != null && message.hasOwnProperty("BonusBalance"))
                object.BonusBalance = message.BonusBalance;
            return object;
        };

        /**
         * Converts this BalanceResp to JSON.
         * @function toJSON
         * @memberof web_proto.BalanceResp
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        BalanceResp.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for BalanceResp
         * @function getTypeUrl
         * @memberof web_proto.BalanceResp
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        BalanceResp.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/web_proto.BalanceResp";
        };

        return BalanceResp;
    })();

    web_proto.AddBalanceResp = (function() {

        /**
         * Properties of an AddBalanceResp.
         * @memberof web_proto
         * @interface IAddBalanceResp
         * @property {string|null} [Currency] AddBalanceResp Currency
         * @property {string|null} [Amount] AddBalanceResp Amount
         * @property {string|null} [Balance] AddBalanceResp Balance
         * @property {number|Long|null} [Type] AddBalanceResp Type
         */

        /**
         * Constructs a new AddBalanceResp.
         * @memberof web_proto
         * @classdesc Represents an AddBalanceResp.
         * @implements IAddBalanceResp
         * @constructor
         * @param {web_proto.IAddBalanceResp=} [properties] Properties to set
         */
        function AddBalanceResp(properties) {
            if (properties)
                for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * AddBalanceResp Currency.
         * @member {string} Currency
         * @memberof web_proto.AddBalanceResp
         * @instance
         */
        AddBalanceResp.prototype.Currency = "";

        /**
         * AddBalanceResp Amount.
         * @member {string} Amount
         * @memberof web_proto.AddBalanceResp
         * @instance
         */
        AddBalanceResp.prototype.Amount = "";

        /**
         * AddBalanceResp Balance.
         * @member {string} Balance
         * @memberof web_proto.AddBalanceResp
         * @instance
         */
        AddBalanceResp.prototype.Balance = "";

        /**
         * AddBalanceResp Type.
         * @member {number|Long} Type
         * @memberof web_proto.AddBalanceResp
         * @instance
         */
        AddBalanceResp.prototype.Type = $util.Long ? $util.Long.fromBits(0,0,false) : 0;

        /**
         * Creates a new AddBalanceResp instance using the specified properties.
         * @function create
         * @memberof web_proto.AddBalanceResp
         * @static
         * @param {web_proto.IAddBalanceResp=} [properties] Properties to set
         * @returns {web_proto.AddBalanceResp} AddBalanceResp instance
         */
        AddBalanceResp.create = function create(properties) {
            return new AddBalanceResp(properties);
        };

        /**
         * Encodes the specified AddBalanceResp message. Does not implicitly {@link web_proto.AddBalanceResp.verify|verify} messages.
         * @function encode
         * @memberof web_proto.AddBalanceResp
         * @static
         * @param {web_proto.IAddBalanceResp} message AddBalanceResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        AddBalanceResp.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.Currency != null && Object.hasOwnProperty.call(message, "Currency"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.Currency);
            if (message.Amount != null && Object.hasOwnProperty.call(message, "Amount"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.Amount);
            if (message.Balance != null && Object.hasOwnProperty.call(message, "Balance"))
                writer.uint32(/* id 3, wireType 2 =*/26).string(message.Balance);
            if (message.Type != null && Object.hasOwnProperty.call(message, "Type"))
                writer.uint32(/* id 4, wireType 0 =*/32).int64(message.Type);
            return writer;
        };

        /**
         * Encodes the specified AddBalanceResp message, length delimited. Does not implicitly {@link web_proto.AddBalanceResp.verify|verify} messages.
         * @function encodeDelimited
         * @memberof web_proto.AddBalanceResp
         * @static
         * @param {web_proto.IAddBalanceResp} message AddBalanceResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        AddBalanceResp.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes an AddBalanceResp message from the specified reader or buffer.
         * @function decode
         * @memberof web_proto.AddBalanceResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {web_proto.AddBalanceResp} AddBalanceResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        AddBalanceResp.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            let end = length === undefined ? reader.len : reader.pos + length, message = new $root.web_proto.AddBalanceResp();
            while (reader.pos < end) {
                let tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.Currency = reader.string();
                        break;
                    }
                case 2: {
                        message.Amount = reader.string();
                        break;
                    }
                case 3: {
                        message.Balance = reader.string();
                        break;
                    }
                case 4: {
                        message.Type = reader.int64();
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes an AddBalanceResp message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof web_proto.AddBalanceResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {web_proto.AddBalanceResp} AddBalanceResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        AddBalanceResp.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies an AddBalanceResp message.
         * @function verify
         * @memberof web_proto.AddBalanceResp
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        AddBalanceResp.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.Currency != null && message.hasOwnProperty("Currency"))
                if (!$util.isString(message.Currency))
                    return "Currency: string expected";
            if (message.Amount != null && message.hasOwnProperty("Amount"))
                if (!$util.isString(message.Amount))
                    return "Amount: string expected";
            if (message.Balance != null && message.hasOwnProperty("Balance"))
                if (!$util.isString(message.Balance))
                    return "Balance: string expected";
            if (message.Type != null && message.hasOwnProperty("Type"))
                if (!$util.isInteger(message.Type) && !(message.Type && $util.isInteger(message.Type.low) && $util.isInteger(message.Type.high)))
                    return "Type: integer|Long expected";
            return null;
        };

        /**
         * Creates an AddBalanceResp message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof web_proto.AddBalanceResp
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {web_proto.AddBalanceResp} AddBalanceResp
         */
        AddBalanceResp.fromObject = function fromObject(object) {
            if (object instanceof $root.web_proto.AddBalanceResp)
                return object;
            let message = new $root.web_proto.AddBalanceResp();
            if (object.Currency != null)
                message.Currency = String(object.Currency);
            if (object.Amount != null)
                message.Amount = String(object.Amount);
            if (object.Balance != null)
                message.Balance = String(object.Balance);
            if (object.Type != null)
                if ($util.Long)
                    (message.Type = $util.Long.fromValue(object.Type)).unsigned = false;
                else if (typeof object.Type === "string")
                    message.Type = parseInt(object.Type, 10);
                else if (typeof object.Type === "number")
                    message.Type = object.Type;
                else if (typeof object.Type === "object")
                    message.Type = new $util.LongBits(object.Type.low >>> 0, object.Type.high >>> 0).toNumber();
            return message;
        };

        /**
         * Creates a plain object from an AddBalanceResp message. Also converts values to other types if specified.
         * @function toObject
         * @memberof web_proto.AddBalanceResp
         * @static
         * @param {web_proto.AddBalanceResp} message AddBalanceResp
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        AddBalanceResp.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            let object = {};
            if (options.defaults) {
                object.Currency = "";
                object.Amount = "";
                object.Balance = "";
                if ($util.Long) {
                    let long = new $util.Long(0, 0, false);
                    object.Type = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.Type = options.longs === String ? "0" : 0;
            }
            if (message.Currency != null && message.hasOwnProperty("Currency"))
                object.Currency = message.Currency;
            if (message.Amount != null && message.hasOwnProperty("Amount"))
                object.Amount = message.Amount;
            if (message.Balance != null && message.hasOwnProperty("Balance"))
                object.Balance = message.Balance;
            if (message.Type != null && message.hasOwnProperty("Type"))
                if (typeof message.Type === "number")
                    object.Type = options.longs === String ? String(message.Type) : message.Type;
                else
                    object.Type = options.longs === String ? $util.Long.prototype.toString.call(message.Type) : options.longs === Number ? new $util.LongBits(message.Type.low >>> 0, message.Type.high >>> 0).toNumber() : message.Type;
            return object;
        };

        /**
         * Converts this AddBalanceResp to JSON.
         * @function toJSON
         * @memberof web_proto.AddBalanceResp
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        AddBalanceResp.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for AddBalanceResp
         * @function getTypeUrl
         * @memberof web_proto.AddBalanceResp
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        AddBalanceResp.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/web_proto.AddBalanceResp";
        };

        return AddBalanceResp;
    })();

    web_proto.LoginResp = (function() {

        /**
         * Properties of a LoginResp.
         * @memberof web_proto
         * @interface ILoginResp
         * @property {web_proto.IUserDetail|null} [User] LoginResp User
         * @property {number|Long|null} [Version] LoginResp Version
         */

        /**
         * Constructs a new LoginResp.
         * @memberof web_proto
         * @classdesc Represents a LoginResp.
         * @implements ILoginResp
         * @constructor
         * @param {web_proto.ILoginResp=} [properties] Properties to set
         */
        function LoginResp(properties) {
            if (properties)
                for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * LoginResp User.
         * @member {web_proto.IUserDetail|null|undefined} User
         * @memberof web_proto.LoginResp
         * @instance
         */
        LoginResp.prototype.User = null;

        /**
         * LoginResp Version.
         * @member {number|Long} Version
         * @memberof web_proto.LoginResp
         * @instance
         */
        LoginResp.prototype.Version = $util.Long ? $util.Long.fromBits(0,0,false) : 0;

        /**
         * Creates a new LoginResp instance using the specified properties.
         * @function create
         * @memberof web_proto.LoginResp
         * @static
         * @param {web_proto.ILoginResp=} [properties] Properties to set
         * @returns {web_proto.LoginResp} LoginResp instance
         */
        LoginResp.create = function create(properties) {
            return new LoginResp(properties);
        };

        /**
         * Encodes the specified LoginResp message. Does not implicitly {@link web_proto.LoginResp.verify|verify} messages.
         * @function encode
         * @memberof web_proto.LoginResp
         * @static
         * @param {web_proto.ILoginResp} message LoginResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        LoginResp.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.User != null && Object.hasOwnProperty.call(message, "User"))
                $root.web_proto.UserDetail.encode(message.User, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
            if (message.Version != null && Object.hasOwnProperty.call(message, "Version"))
                writer.uint32(/* id 2, wireType 0 =*/16).int64(message.Version);
            return writer;
        };

        /**
         * Encodes the specified LoginResp message, length delimited. Does not implicitly {@link web_proto.LoginResp.verify|verify} messages.
         * @function encodeDelimited
         * @memberof web_proto.LoginResp
         * @static
         * @param {web_proto.ILoginResp} message LoginResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        LoginResp.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a LoginResp message from the specified reader or buffer.
         * @function decode
         * @memberof web_proto.LoginResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {web_proto.LoginResp} LoginResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        LoginResp.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            let end = length === undefined ? reader.len : reader.pos + length, message = new $root.web_proto.LoginResp();
            while (reader.pos < end) {
                let tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.User = $root.web_proto.UserDetail.decode(reader, reader.uint32());
                        break;
                    }
                case 2: {
                        message.Version = reader.int64();
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a LoginResp message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof web_proto.LoginResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {web_proto.LoginResp} LoginResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        LoginResp.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a LoginResp message.
         * @function verify
         * @memberof web_proto.LoginResp
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        LoginResp.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.User != null && message.hasOwnProperty("User")) {
                let error = $root.web_proto.UserDetail.verify(message.User);
                if (error)
                    return "User." + error;
            }
            if (message.Version != null && message.hasOwnProperty("Version"))
                if (!$util.isInteger(message.Version) && !(message.Version && $util.isInteger(message.Version.low) && $util.isInteger(message.Version.high)))
                    return "Version: integer|Long expected";
            return null;
        };

        /**
         * Creates a LoginResp message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof web_proto.LoginResp
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {web_proto.LoginResp} LoginResp
         */
        LoginResp.fromObject = function fromObject(object) {
            if (object instanceof $root.web_proto.LoginResp)
                return object;
            let message = new $root.web_proto.LoginResp();
            if (object.User != null) {
                if (typeof object.User !== "object")
                    throw TypeError(".web_proto.LoginResp.User: object expected");
                message.User = $root.web_proto.UserDetail.fromObject(object.User);
            }
            if (object.Version != null)
                if ($util.Long)
                    (message.Version = $util.Long.fromValue(object.Version)).unsigned = false;
                else if (typeof object.Version === "string")
                    message.Version = parseInt(object.Version, 10);
                else if (typeof object.Version === "number")
                    message.Version = object.Version;
                else if (typeof object.Version === "object")
                    message.Version = new $util.LongBits(object.Version.low >>> 0, object.Version.high >>> 0).toNumber();
            return message;
        };

        /**
         * Creates a plain object from a LoginResp message. Also converts values to other types if specified.
         * @function toObject
         * @memberof web_proto.LoginResp
         * @static
         * @param {web_proto.LoginResp} message LoginResp
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        LoginResp.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            let object = {};
            if (options.defaults) {
                object.User = null;
                if ($util.Long) {
                    let long = new $util.Long(0, 0, false);
                    object.Version = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.Version = options.longs === String ? "0" : 0;
            }
            if (message.User != null && message.hasOwnProperty("User"))
                object.User = $root.web_proto.UserDetail.toObject(message.User, options);
            if (message.Version != null && message.hasOwnProperty("Version"))
                if (typeof message.Version === "number")
                    object.Version = options.longs === String ? String(message.Version) : message.Version;
                else
                    object.Version = options.longs === String ? $util.Long.prototype.toString.call(message.Version) : options.longs === Number ? new $util.LongBits(message.Version.low >>> 0, message.Version.high >>> 0).toNumber() : message.Version;
            return object;
        };

        /**
         * Converts this LoginResp to JSON.
         * @function toJSON
         * @memberof web_proto.LoginResp
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        LoginResp.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for LoginResp
         * @function getTypeUrl
         * @memberof web_proto.LoginResp
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        LoginResp.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/web_proto.LoginResp";
        };

        return LoginResp;
    })();

    web_proto.CurrencyRateResp = (function() {

        /**
         * Properties of a CurrencyRateResp.
         * @memberof web_proto
         * @interface ICurrencyRateResp
         * @property {Object.<string,web_proto.ICurrencyRate>|null} [Rates] CurrencyRateResp Rates
         */

        /**
         * Constructs a new CurrencyRateResp.
         * @memberof web_proto
         * @classdesc Represents a CurrencyRateResp.
         * @implements ICurrencyRateResp
         * @constructor
         * @param {web_proto.ICurrencyRateResp=} [properties] Properties to set
         */
        function CurrencyRateResp(properties) {
            this.Rates = {};
            if (properties)
                for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * CurrencyRateResp Rates.
         * @member {Object.<string,web_proto.ICurrencyRate>} Rates
         * @memberof web_proto.CurrencyRateResp
         * @instance
         */
        CurrencyRateResp.prototype.Rates = $util.emptyObject;

        /**
         * Creates a new CurrencyRateResp instance using the specified properties.
         * @function create
         * @memberof web_proto.CurrencyRateResp
         * @static
         * @param {web_proto.ICurrencyRateResp=} [properties] Properties to set
         * @returns {web_proto.CurrencyRateResp} CurrencyRateResp instance
         */
        CurrencyRateResp.create = function create(properties) {
            return new CurrencyRateResp(properties);
        };

        /**
         * Encodes the specified CurrencyRateResp message. Does not implicitly {@link web_proto.CurrencyRateResp.verify|verify} messages.
         * @function encode
         * @memberof web_proto.CurrencyRateResp
         * @static
         * @param {web_proto.ICurrencyRateResp} message CurrencyRateResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CurrencyRateResp.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.Rates != null && Object.hasOwnProperty.call(message, "Rates"))
                for (let keys = Object.keys(message.Rates), i = 0; i < keys.length; ++i) {
                    writer.uint32(/* id 1, wireType 2 =*/10).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]);
                    $root.web_proto.CurrencyRate.encode(message.Rates[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim();
                }
            return writer;
        };

        /**
         * Encodes the specified CurrencyRateResp message, length delimited. Does not implicitly {@link web_proto.CurrencyRateResp.verify|verify} messages.
         * @function encodeDelimited
         * @memberof web_proto.CurrencyRateResp
         * @static
         * @param {web_proto.ICurrencyRateResp} message CurrencyRateResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CurrencyRateResp.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a CurrencyRateResp message from the specified reader or buffer.
         * @function decode
         * @memberof web_proto.CurrencyRateResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {web_proto.CurrencyRateResp} CurrencyRateResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CurrencyRateResp.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            let end = length === undefined ? reader.len : reader.pos + length, message = new $root.web_proto.CurrencyRateResp(), key, value;
            while (reader.pos < end) {
                let tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        if (message.Rates === $util.emptyObject)
                            message.Rates = {};
                        let end2 = reader.uint32() + reader.pos;
                        key = "";
                        value = null;
                        while (reader.pos < end2) {
                            let tag2 = reader.uint32();
                            switch (tag2 >>> 3) {
                            case 1:
                                key = reader.string();
                                break;
                            case 2:
                                value = $root.web_proto.CurrencyRate.decode(reader, reader.uint32());
                                break;
                            default:
                                reader.skipType(tag2 & 7);
                                break;
                            }
                        }
                        message.Rates[key] = value;
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a CurrencyRateResp message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof web_proto.CurrencyRateResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {web_proto.CurrencyRateResp} CurrencyRateResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CurrencyRateResp.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a CurrencyRateResp message.
         * @function verify
         * @memberof web_proto.CurrencyRateResp
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CurrencyRateResp.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.Rates != null && message.hasOwnProperty("Rates")) {
                if (!$util.isObject(message.Rates))
                    return "Rates: object expected";
                let key = Object.keys(message.Rates);
                for (let i = 0; i < key.length; ++i) {
                    let error = $root.web_proto.CurrencyRate.verify(message.Rates[key[i]]);
                    if (error)
                        return "Rates." + error;
                }
            }
            return null;
        };

        /**
         * Creates a CurrencyRateResp message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof web_proto.CurrencyRateResp
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {web_proto.CurrencyRateResp} CurrencyRateResp
         */
        CurrencyRateResp.fromObject = function fromObject(object) {
            if (object instanceof $root.web_proto.CurrencyRateResp)
                return object;
            let message = new $root.web_proto.CurrencyRateResp();
            if (object.Rates) {
                if (typeof object.Rates !== "object")
                    throw TypeError(".web_proto.CurrencyRateResp.Rates: object expected");
                message.Rates = {};
                for (let keys = Object.keys(object.Rates), i = 0; i < keys.length; ++i) {
                    if (typeof object.Rates[keys[i]] !== "object")
                        throw TypeError(".web_proto.CurrencyRateResp.Rates: object expected");
                    message.Rates[keys[i]] = $root.web_proto.CurrencyRate.fromObject(object.Rates[keys[i]]);
                }
            }
            return message;
        };

        /**
         * Creates a plain object from a CurrencyRateResp message. Also converts values to other types if specified.
         * @function toObject
         * @memberof web_proto.CurrencyRateResp
         * @static
         * @param {web_proto.CurrencyRateResp} message CurrencyRateResp
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CurrencyRateResp.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            let object = {};
            if (options.objects || options.defaults)
                object.Rates = {};
            let keys2;
            if (message.Rates && (keys2 = Object.keys(message.Rates)).length) {
                object.Rates = {};
                for (let j = 0; j < keys2.length; ++j)
                    object.Rates[keys2[j]] = $root.web_proto.CurrencyRate.toObject(message.Rates[keys2[j]], options);
            }
            return object;
        };

        /**
         * Converts this CurrencyRateResp to JSON.
         * @function toJSON
         * @memberof web_proto.CurrencyRateResp
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CurrencyRateResp.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for CurrencyRateResp
         * @function getTypeUrl
         * @memberof web_proto.CurrencyRateResp
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        CurrencyRateResp.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/web_proto.CurrencyRateResp";
        };

        return CurrencyRateResp;
    })();

    web_proto.CurrencyRate = (function() {

        /**
         * Properties of a CurrencyRate.
         * @memberof web_proto
         * @interface ICurrencyRate
         * @property {string|null} [USDT] CurrencyRate USDT
         * @property {string|null} [USD] CurrencyRate USD
         */

        /**
         * Constructs a new CurrencyRate.
         * @memberof web_proto
         * @classdesc Represents a CurrencyRate.
         * @implements ICurrencyRate
         * @constructor
         * @param {web_proto.ICurrencyRate=} [properties] Properties to set
         */
        function CurrencyRate(properties) {
            if (properties)
                for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * CurrencyRate USDT.
         * @member {string} USDT
         * @memberof web_proto.CurrencyRate
         * @instance
         */
        CurrencyRate.prototype.USDT = "";

        /**
         * CurrencyRate USD.
         * @member {string} USD
         * @memberof web_proto.CurrencyRate
         * @instance
         */
        CurrencyRate.prototype.USD = "";

        /**
         * Creates a new CurrencyRate instance using the specified properties.
         * @function create
         * @memberof web_proto.CurrencyRate
         * @static
         * @param {web_proto.ICurrencyRate=} [properties] Properties to set
         * @returns {web_proto.CurrencyRate} CurrencyRate instance
         */
        CurrencyRate.create = function create(properties) {
            return new CurrencyRate(properties);
        };

        /**
         * Encodes the specified CurrencyRate message. Does not implicitly {@link web_proto.CurrencyRate.verify|verify} messages.
         * @function encode
         * @memberof web_proto.CurrencyRate
         * @static
         * @param {web_proto.ICurrencyRate} message CurrencyRate message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CurrencyRate.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.USDT != null && Object.hasOwnProperty.call(message, "USDT"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.USDT);
            if (message.USD != null && Object.hasOwnProperty.call(message, "USD"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.USD);
            return writer;
        };

        /**
         * Encodes the specified CurrencyRate message, length delimited. Does not implicitly {@link web_proto.CurrencyRate.verify|verify} messages.
         * @function encodeDelimited
         * @memberof web_proto.CurrencyRate
         * @static
         * @param {web_proto.ICurrencyRate} message CurrencyRate message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CurrencyRate.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a CurrencyRate message from the specified reader or buffer.
         * @function decode
         * @memberof web_proto.CurrencyRate
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {web_proto.CurrencyRate} CurrencyRate
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CurrencyRate.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            let end = length === undefined ? reader.len : reader.pos + length, message = new $root.web_proto.CurrencyRate();
            while (reader.pos < end) {
                let tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.USDT = reader.string();
                        break;
                    }
                case 2: {
                        message.USD = reader.string();
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a CurrencyRate message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof web_proto.CurrencyRate
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {web_proto.CurrencyRate} CurrencyRate
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CurrencyRate.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a CurrencyRate message.
         * @function verify
         * @memberof web_proto.CurrencyRate
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CurrencyRate.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.USDT != null && message.hasOwnProperty("USDT"))
                if (!$util.isString(message.USDT))
                    return "USDT: string expected";
            if (message.USD != null && message.hasOwnProperty("USD"))
                if (!$util.isString(message.USD))
                    return "USD: string expected";
            return null;
        };

        /**
         * Creates a CurrencyRate message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof web_proto.CurrencyRate
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {web_proto.CurrencyRate} CurrencyRate
         */
        CurrencyRate.fromObject = function fromObject(object) {
            if (object instanceof $root.web_proto.CurrencyRate)
                return object;
            let message = new $root.web_proto.CurrencyRate();
            if (object.USDT != null)
                message.USDT = String(object.USDT);
            if (object.USD != null)
                message.USD = String(object.USD);
            return message;
        };

        /**
         * Creates a plain object from a CurrencyRate message. Also converts values to other types if specified.
         * @function toObject
         * @memberof web_proto.CurrencyRate
         * @static
         * @param {web_proto.CurrencyRate} message CurrencyRate
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CurrencyRate.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            let object = {};
            if (options.defaults) {
                object.USDT = "";
                object.USD = "";
            }
            if (message.USDT != null && message.hasOwnProperty("USDT"))
                object.USDT = message.USDT;
            if (message.USD != null && message.hasOwnProperty("USD"))
                object.USD = message.USD;
            return object;
        };

        /**
         * Converts this CurrencyRate to JSON.
         * @function toJSON
         * @memberof web_proto.CurrencyRate
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CurrencyRate.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for CurrencyRate
         * @function getTypeUrl
         * @memberof web_proto.CurrencyRate
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        CurrencyRate.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/web_proto.CurrencyRate";
        };

        return CurrencyRate;
    })();

    web_proto.LevelUpgradeResp = (function() {

        /**
         * Properties of a LevelUpgradeResp.
         * @memberof web_proto
         * @interface ILevelUpgradeResp
         * @property {string|null} [Name] LevelUpgradeResp Name
         * @property {number|Long|null} [Level] LevelUpgradeResp Level
         * @property {string|null} [LevelIcon] LevelUpgradeResp LevelIcon
         * @property {string|null} [UpgradeReward] LevelUpgradeResp UpgradeReward
         * @property {number|null} [BetMultiples] LevelUpgradeResp BetMultiples
         */

        /**
         * Constructs a new LevelUpgradeResp.
         * @memberof web_proto
         * @classdesc Represents a LevelUpgradeResp.
         * @implements ILevelUpgradeResp
         * @constructor
         * @param {web_proto.ILevelUpgradeResp=} [properties] Properties to set
         */
        function LevelUpgradeResp(properties) {
            if (properties)
                for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * LevelUpgradeResp Name.
         * @member {string} Name
         * @memberof web_proto.LevelUpgradeResp
         * @instance
         */
        LevelUpgradeResp.prototype.Name = "";

        /**
         * LevelUpgradeResp Level.
         * @member {number|Long} Level
         * @memberof web_proto.LevelUpgradeResp
         * @instance
         */
        LevelUpgradeResp.prototype.Level = $util.Long ? $util.Long.fromBits(0,0,false) : 0;

        /**
         * LevelUpgradeResp LevelIcon.
         * @member {string} LevelIcon
         * @memberof web_proto.LevelUpgradeResp
         * @instance
         */
        LevelUpgradeResp.prototype.LevelIcon = "";

        /**
         * LevelUpgradeResp UpgradeReward.
         * @member {string} UpgradeReward
         * @memberof web_proto.LevelUpgradeResp
         * @instance
         */
        LevelUpgradeResp.prototype.UpgradeReward = "";

        /**
         * LevelUpgradeResp BetMultiples.
         * @member {number} BetMultiples
         * @memberof web_proto.LevelUpgradeResp
         * @instance
         */
        LevelUpgradeResp.prototype.BetMultiples = 0;

        /**
         * Creates a new LevelUpgradeResp instance using the specified properties.
         * @function create
         * @memberof web_proto.LevelUpgradeResp
         * @static
         * @param {web_proto.ILevelUpgradeResp=} [properties] Properties to set
         * @returns {web_proto.LevelUpgradeResp} LevelUpgradeResp instance
         */
        LevelUpgradeResp.create = function create(properties) {
            return new LevelUpgradeResp(properties);
        };

        /**
         * Encodes the specified LevelUpgradeResp message. Does not implicitly {@link web_proto.LevelUpgradeResp.verify|verify} messages.
         * @function encode
         * @memberof web_proto.LevelUpgradeResp
         * @static
         * @param {web_proto.ILevelUpgradeResp} message LevelUpgradeResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        LevelUpgradeResp.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.Name != null && Object.hasOwnProperty.call(message, "Name"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.Name);
            if (message.Level != null && Object.hasOwnProperty.call(message, "Level"))
                writer.uint32(/* id 2, wireType 0 =*/16).int64(message.Level);
            if (message.LevelIcon != null && Object.hasOwnProperty.call(message, "LevelIcon"))
                writer.uint32(/* id 3, wireType 2 =*/26).string(message.LevelIcon);
            if (message.UpgradeReward != null && Object.hasOwnProperty.call(message, "UpgradeReward"))
                writer.uint32(/* id 4, wireType 2 =*/34).string(message.UpgradeReward);
            if (message.BetMultiples != null && Object.hasOwnProperty.call(message, "BetMultiples"))
                writer.uint32(/* id 5, wireType 1 =*/41).double(message.BetMultiples);
            return writer;
        };

        /**
         * Encodes the specified LevelUpgradeResp message, length delimited. Does not implicitly {@link web_proto.LevelUpgradeResp.verify|verify} messages.
         * @function encodeDelimited
         * @memberof web_proto.LevelUpgradeResp
         * @static
         * @param {web_proto.ILevelUpgradeResp} message LevelUpgradeResp message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        LevelUpgradeResp.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a LevelUpgradeResp message from the specified reader or buffer.
         * @function decode
         * @memberof web_proto.LevelUpgradeResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {web_proto.LevelUpgradeResp} LevelUpgradeResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        LevelUpgradeResp.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            let end = length === undefined ? reader.len : reader.pos + length, message = new $root.web_proto.LevelUpgradeResp();
            while (reader.pos < end) {
                let tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.Name = reader.string();
                        break;
                    }
                case 2: {
                        message.Level = reader.int64();
                        break;
                    }
                case 3: {
                        message.LevelIcon = reader.string();
                        break;
                    }
                case 4: {
                        message.UpgradeReward = reader.string();
                        break;
                    }
                case 5: {
                        message.BetMultiples = reader.double();
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a LevelUpgradeResp message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof web_proto.LevelUpgradeResp
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {web_proto.LevelUpgradeResp} LevelUpgradeResp
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        LevelUpgradeResp.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a LevelUpgradeResp message.
         * @function verify
         * @memberof web_proto.LevelUpgradeResp
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        LevelUpgradeResp.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.Name != null && message.hasOwnProperty("Name"))
                if (!$util.isString(message.Name))
                    return "Name: string expected";
            if (message.Level != null && message.hasOwnProperty("Level"))
                if (!$util.isInteger(message.Level) && !(message.Level && $util.isInteger(message.Level.low) && $util.isInteger(message.Level.high)))
                    return "Level: integer|Long expected";
            if (message.LevelIcon != null && message.hasOwnProperty("LevelIcon"))
                if (!$util.isString(message.LevelIcon))
                    return "LevelIcon: string expected";
            if (message.UpgradeReward != null && message.hasOwnProperty("UpgradeReward"))
                if (!$util.isString(message.UpgradeReward))
                    return "UpgradeReward: string expected";
            if (message.BetMultiples != null && message.hasOwnProperty("BetMultiples"))
                if (typeof message.BetMultiples !== "number")
                    return "BetMultiples: number expected";
            return null;
        };

        /**
         * Creates a LevelUpgradeResp message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof web_proto.LevelUpgradeResp
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {web_proto.LevelUpgradeResp} LevelUpgradeResp
         */
        LevelUpgradeResp.fromObject = function fromObject(object) {
            if (object instanceof $root.web_proto.LevelUpgradeResp)
                return object;
            let message = new $root.web_proto.LevelUpgradeResp();
            if (object.Name != null)
                message.Name = String(object.Name);
            if (object.Level != null)
                if ($util.Long)
                    (message.Level = $util.Long.fromValue(object.Level)).unsigned = false;
                else if (typeof object.Level === "string")
                    message.Level = parseInt(object.Level, 10);
                else if (typeof object.Level === "number")
                    message.Level = object.Level;
                else if (typeof object.Level === "object")
                    message.Level = new $util.LongBits(object.Level.low >>> 0, object.Level.high >>> 0).toNumber();
            if (object.LevelIcon != null)
                message.LevelIcon = String(object.LevelIcon);
            if (object.UpgradeReward != null)
                message.UpgradeReward = String(object.UpgradeReward);
            if (object.BetMultiples != null)
                message.BetMultiples = Number(object.BetMultiples);
            return message;
        };

        /**
         * Creates a plain object from a LevelUpgradeResp message. Also converts values to other types if specified.
         * @function toObject
         * @memberof web_proto.LevelUpgradeResp
         * @static
         * @param {web_proto.LevelUpgradeResp} message LevelUpgradeResp
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        LevelUpgradeResp.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            let object = {};
            if (options.defaults) {
                object.Name = "";
                if ($util.Long) {
                    let long = new $util.Long(0, 0, false);
                    object.Level = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.Level = options.longs === String ? "0" : 0;
                object.LevelIcon = "";
                object.UpgradeReward = "";
                object.BetMultiples = 0;
            }
            if (message.Name != null && message.hasOwnProperty("Name"))
                object.Name = message.Name;
            if (message.Level != null && message.hasOwnProperty("Level"))
                if (typeof message.Level === "number")
                    object.Level = options.longs === String ? String(message.Level) : message.Level;
                else
                    object.Level = options.longs === String ? $util.Long.prototype.toString.call(message.Level) : options.longs === Number ? new $util.LongBits(message.Level.low >>> 0, message.Level.high >>> 0).toNumber() : message.Level;
            if (message.LevelIcon != null && message.hasOwnProperty("LevelIcon"))
                object.LevelIcon = message.LevelIcon;
            if (message.UpgradeReward != null && message.hasOwnProperty("UpgradeReward"))
                object.UpgradeReward = message.UpgradeReward;
            if (message.BetMultiples != null && message.hasOwnProperty("BetMultiples"))
                object.BetMultiples = options.json && !isFinite(message.BetMultiples) ? String(message.BetMultiples) : message.BetMultiples;
            return object;
        };

        /**
         * Converts this LevelUpgradeResp to JSON.
         * @function toJSON
         * @memberof web_proto.LevelUpgradeResp
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        LevelUpgradeResp.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for LevelUpgradeResp
         * @function getTypeUrl
         * @memberof web_proto.LevelUpgradeResp
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        LevelUpgradeResp.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/web_proto.LevelUpgradeResp";
        };

        return LevelUpgradeResp;
    })();

    web_proto.UserDetail = (function() {

        /**
         * Properties of a UserDetail.
         * @memberof web_proto
         * @interface IUserDetail
         * @property {string|null} [UID] UserDetail UID
         * @property {string|null} [Nickname] UserDetail Nickname
         * @property {number|Long|null} [Level] UserDetail Level
         * @property {number|Long|null} [Avatar] UserDetail Avatar
         */

        /**
         * Constructs a new UserDetail.
         * @memberof web_proto
         * @classdesc Represents a UserDetail.
         * @implements IUserDetail
         * @constructor
         * @param {web_proto.IUserDetail=} [properties] Properties to set
         */
        function UserDetail(properties) {
            if (properties)
                for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * UserDetail UID.
         * @member {string} UID
         * @memberof web_proto.UserDetail
         * @instance
         */
        UserDetail.prototype.UID = "";

        /**
         * UserDetail Nickname.
         * @member {string} Nickname
         * @memberof web_proto.UserDetail
         * @instance
         */
        UserDetail.prototype.Nickname = "";

        /**
         * UserDetail Level.
         * @member {number|Long} Level
         * @memberof web_proto.UserDetail
         * @instance
         */
        UserDetail.prototype.Level = $util.Long ? $util.Long.fromBits(0,0,false) : 0;

        /**
         * UserDetail Avatar.
         * @member {number|Long} Avatar
         * @memberof web_proto.UserDetail
         * @instance
         */
        UserDetail.prototype.Avatar = $util.Long ? $util.Long.fromBits(0,0,false) : 0;

        /**
         * Creates a new UserDetail instance using the specified properties.
         * @function create
         * @memberof web_proto.UserDetail
         * @static
         * @param {web_proto.IUserDetail=} [properties] Properties to set
         * @returns {web_proto.UserDetail} UserDetail instance
         */
        UserDetail.create = function create(properties) {
            return new UserDetail(properties);
        };

        /**
         * Encodes the specified UserDetail message. Does not implicitly {@link web_proto.UserDetail.verify|verify} messages.
         * @function encode
         * @memberof web_proto.UserDetail
         * @static
         * @param {web_proto.IUserDetail} message UserDetail message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        UserDetail.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.UID != null && Object.hasOwnProperty.call(message, "UID"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.UID);
            if (message.Nickname != null && Object.hasOwnProperty.call(message, "Nickname"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.Nickname);
            if (message.Level != null && Object.hasOwnProperty.call(message, "Level"))
                writer.uint32(/* id 3, wireType 0 =*/24).int64(message.Level);
            if (message.Avatar != null && Object.hasOwnProperty.call(message, "Avatar"))
                writer.uint32(/* id 4, wireType 0 =*/32).int64(message.Avatar);
            return writer;
        };

        /**
         * Encodes the specified UserDetail message, length delimited. Does not implicitly {@link web_proto.UserDetail.verify|verify} messages.
         * @function encodeDelimited
         * @memberof web_proto.UserDetail
         * @static
         * @param {web_proto.IUserDetail} message UserDetail message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        UserDetail.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a UserDetail message from the specified reader or buffer.
         * @function decode
         * @memberof web_proto.UserDetail
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {web_proto.UserDetail} UserDetail
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        UserDetail.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            let end = length === undefined ? reader.len : reader.pos + length, message = new $root.web_proto.UserDetail();
            while (reader.pos < end) {
                let tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.UID = reader.string();
                        break;
                    }
                case 2: {
                        message.Nickname = reader.string();
                        break;
                    }
                case 3: {
                        message.Level = reader.int64();
                        break;
                    }
                case 4: {
                        message.Avatar = reader.int64();
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a UserDetail message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof web_proto.UserDetail
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {web_proto.UserDetail} UserDetail
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        UserDetail.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a UserDetail message.
         * @function verify
         * @memberof web_proto.UserDetail
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        UserDetail.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.UID != null && message.hasOwnProperty("UID"))
                if (!$util.isString(message.UID))
                    return "UID: string expected";
            if (message.Nickname != null && message.hasOwnProperty("Nickname"))
                if (!$util.isString(message.Nickname))
                    return "Nickname: string expected";
            if (message.Level != null && message.hasOwnProperty("Level"))
                if (!$util.isInteger(message.Level) && !(message.Level && $util.isInteger(message.Level.low) && $util.isInteger(message.Level.high)))
                    return "Level: integer|Long expected";
            if (message.Avatar != null && message.hasOwnProperty("Avatar"))
                if (!$util.isInteger(message.Avatar) && !(message.Avatar && $util.isInteger(message.Avatar.low) && $util.isInteger(message.Avatar.high)))
                    return "Avatar: integer|Long expected";
            return null;
        };

        /**
         * Creates a UserDetail message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof web_proto.UserDetail
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {web_proto.UserDetail} UserDetail
         */
        UserDetail.fromObject = function fromObject(object) {
            if (object instanceof $root.web_proto.UserDetail)
                return object;
            let message = new $root.web_proto.UserDetail();
            if (object.UID != null)
                message.UID = String(object.UID);
            if (object.Nickname != null)
                message.Nickname = String(object.Nickname);
            if (object.Level != null)
                if ($util.Long)
                    (message.Level = $util.Long.fromValue(object.Level)).unsigned = false;
                else if (typeof object.Level === "string")
                    message.Level = parseInt(object.Level, 10);
                else if (typeof object.Level === "number")
                    message.Level = object.Level;
                else if (typeof object.Level === "object")
                    message.Level = new $util.LongBits(object.Level.low >>> 0, object.Level.high >>> 0).toNumber();
            if (object.Avatar != null)
                if ($util.Long)
                    (message.Avatar = $util.Long.fromValue(object.Avatar)).unsigned = false;
                else if (typeof object.Avatar === "string")
                    message.Avatar = parseInt(object.Avatar, 10);
                else if (typeof object.Avatar === "number")
                    message.Avatar = object.Avatar;
                else if (typeof object.Avatar === "object")
                    message.Avatar = new $util.LongBits(object.Avatar.low >>> 0, object.Avatar.high >>> 0).toNumber();
            return message;
        };

        /**
         * Creates a plain object from a UserDetail message. Also converts values to other types if specified.
         * @function toObject
         * @memberof web_proto.UserDetail
         * @static
         * @param {web_proto.UserDetail} message UserDetail
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        UserDetail.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            let object = {};
            if (options.defaults) {
                object.UID = "";
                object.Nickname = "";
                if ($util.Long) {
                    let long = new $util.Long(0, 0, false);
                    object.Level = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.Level = options.longs === String ? "0" : 0;
                if ($util.Long) {
                    let long = new $util.Long(0, 0, false);
                    object.Avatar = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.Avatar = options.longs === String ? "0" : 0;
            }
            if (message.UID != null && message.hasOwnProperty("UID"))
                object.UID = message.UID;
            if (message.Nickname != null && message.hasOwnProperty("Nickname"))
                object.Nickname = message.Nickname;
            if (message.Level != null && message.hasOwnProperty("Level"))
                if (typeof message.Level === "number")
                    object.Level = options.longs === String ? String(message.Level) : message.Level;
                else
                    object.Level = options.longs === String ? $util.Long.prototype.toString.call(message.Level) : options.longs === Number ? new $util.LongBits(message.Level.low >>> 0, message.Level.high >>> 0).toNumber() : message.Level;
            if (message.Avatar != null && message.hasOwnProperty("Avatar"))
                if (typeof message.Avatar === "number")
                    object.Avatar = options.longs === String ? String(message.Avatar) : message.Avatar;
                else
                    object.Avatar = options.longs === String ? $util.Long.prototype.toString.call(message.Avatar) : options.longs === Number ? new $util.LongBits(message.Avatar.low >>> 0, message.Avatar.high >>> 0).toNumber() : message.Avatar;
            return object;
        };

        /**
         * Converts this UserDetail to JSON.
         * @function toJSON
         * @memberof web_proto.UserDetail
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        UserDetail.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for UserDetail
         * @function getTypeUrl
         * @memberof web_proto.UserDetail
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        UserDetail.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/web_proto.UserDetail";
        };

        return UserDetail;
    })();

    web_proto.sendUserMessageRequest = (function() {

        /**
         * Properties of a sendUserMessageRequest.
         * @memberof web_proto
         * @interface IsendUserMessageRequest
         * @property {number|Long|null} [UserID] sendUserMessageRequest UserID
         * @property {Uint8Array|null} [Data] sendUserMessageRequest Data
         */

        /**
         * Constructs a new sendUserMessageRequest.
         * @memberof web_proto
         * @classdesc Represents a sendUserMessageRequest.
         * @implements IsendUserMessageRequest
         * @constructor
         * @param {web_proto.IsendUserMessageRequest=} [properties] Properties to set
         */
        function sendUserMessageRequest(properties) {
            if (properties)
                for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * sendUserMessageRequest UserID.
         * @member {number|Long} UserID
         * @memberof web_proto.sendUserMessageRequest
         * @instance
         */
        sendUserMessageRequest.prototype.UserID = $util.Long ? $util.Long.fromBits(0,0,false) : 0;

        /**
         * sendUserMessageRequest Data.
         * @member {Uint8Array} Data
         * @memberof web_proto.sendUserMessageRequest
         * @instance
         */
        sendUserMessageRequest.prototype.Data = $util.newBuffer([]);

        /**
         * Creates a new sendUserMessageRequest instance using the specified properties.
         * @function create
         * @memberof web_proto.sendUserMessageRequest
         * @static
         * @param {web_proto.IsendUserMessageRequest=} [properties] Properties to set
         * @returns {web_proto.sendUserMessageRequest} sendUserMessageRequest instance
         */
        sendUserMessageRequest.create = function create(properties) {
            return new sendUserMessageRequest(properties);
        };

        /**
         * Encodes the specified sendUserMessageRequest message. Does not implicitly {@link web_proto.sendUserMessageRequest.verify|verify} messages.
         * @function encode
         * @memberof web_proto.sendUserMessageRequest
         * @static
         * @param {web_proto.IsendUserMessageRequest} message sendUserMessageRequest message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        sendUserMessageRequest.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.UserID != null && Object.hasOwnProperty.call(message, "UserID"))
                writer.uint32(/* id 1, wireType 0 =*/8).int64(message.UserID);
            if (message.Data != null && Object.hasOwnProperty.call(message, "Data"))
                writer.uint32(/* id 2, wireType 2 =*/18).bytes(message.Data);
            return writer;
        };

        /**
         * Encodes the specified sendUserMessageRequest message, length delimited. Does not implicitly {@link web_proto.sendUserMessageRequest.verify|verify} messages.
         * @function encodeDelimited
         * @memberof web_proto.sendUserMessageRequest
         * @static
         * @param {web_proto.IsendUserMessageRequest} message sendUserMessageRequest message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        sendUserMessageRequest.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a sendUserMessageRequest message from the specified reader or buffer.
         * @function decode
         * @memberof web_proto.sendUserMessageRequest
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {web_proto.sendUserMessageRequest} sendUserMessageRequest
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        sendUserMessageRequest.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            let end = length === undefined ? reader.len : reader.pos + length, message = new $root.web_proto.sendUserMessageRequest();
            while (reader.pos < end) {
                let tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.UserID = reader.int64();
                        break;
                    }
                case 2: {
                        message.Data = reader.bytes();
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a sendUserMessageRequest message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof web_proto.sendUserMessageRequest
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {web_proto.sendUserMessageRequest} sendUserMessageRequest
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        sendUserMessageRequest.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a sendUserMessageRequest message.
         * @function verify
         * @memberof web_proto.sendUserMessageRequest
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        sendUserMessageRequest.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.UserID != null && message.hasOwnProperty("UserID"))
                if (!$util.isInteger(message.UserID) && !(message.UserID && $util.isInteger(message.UserID.low) && $util.isInteger(message.UserID.high)))
                    return "UserID: integer|Long expected";
            if (message.Data != null && message.hasOwnProperty("Data"))
                if (!(message.Data && typeof message.Data.length === "number" || $util.isString(message.Data)))
                    return "Data: buffer expected";
            return null;
        };

        /**
         * Creates a sendUserMessageRequest message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof web_proto.sendUserMessageRequest
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {web_proto.sendUserMessageRequest} sendUserMessageRequest
         */
        sendUserMessageRequest.fromObject = function fromObject(object) {
            if (object instanceof $root.web_proto.sendUserMessageRequest)
                return object;
            let message = new $root.web_proto.sendUserMessageRequest();
            if (object.UserID != null)
                if ($util.Long)
                    (message.UserID = $util.Long.fromValue(object.UserID)).unsigned = false;
                else if (typeof object.UserID === "string")
                    message.UserID = parseInt(object.UserID, 10);
                else if (typeof object.UserID === "number")
                    message.UserID = object.UserID;
                else if (typeof object.UserID === "object")
                    message.UserID = new $util.LongBits(object.UserID.low >>> 0, object.UserID.high >>> 0).toNumber();
            if (object.Data != null)
                if (typeof object.Data === "string")
                    $util.base64.decode(object.Data, message.Data = $util.newBuffer($util.base64.length(object.Data)), 0);
                else if (object.Data.length >= 0)
                    message.Data = object.Data;
            return message;
        };

        /**
         * Creates a plain object from a sendUserMessageRequest message. Also converts values to other types if specified.
         * @function toObject
         * @memberof web_proto.sendUserMessageRequest
         * @static
         * @param {web_proto.sendUserMessageRequest} message sendUserMessageRequest
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        sendUserMessageRequest.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            let object = {};
            if (options.defaults) {
                if ($util.Long) {
                    let long = new $util.Long(0, 0, false);
                    object.UserID = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.UserID = options.longs === String ? "0" : 0;
                if (options.bytes === String)
                    object.Data = "";
                else {
                    object.Data = [];
                    if (options.bytes !== Array)
                        object.Data = $util.newBuffer(object.Data);
                }
            }
            if (message.UserID != null && message.hasOwnProperty("UserID"))
                if (typeof message.UserID === "number")
                    object.UserID = options.longs === String ? String(message.UserID) : message.UserID;
                else
                    object.UserID = options.longs === String ? $util.Long.prototype.toString.call(message.UserID) : options.longs === Number ? new $util.LongBits(message.UserID.low >>> 0, message.UserID.high >>> 0).toNumber() : message.UserID;
            if (message.Data != null && message.hasOwnProperty("Data"))
                object.Data = options.bytes === String ? $util.base64.encode(message.Data, 0, message.Data.length) : options.bytes === Array ? Array.prototype.slice.call(message.Data) : message.Data;
            return object;
        };

        /**
         * Converts this sendUserMessageRequest to JSON.
         * @function toJSON
         * @memberof web_proto.sendUserMessageRequest
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        sendUserMessageRequest.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for sendUserMessageRequest
         * @function getTypeUrl
         * @memberof web_proto.sendUserMessageRequest
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        sendUserMessageRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/web_proto.sendUserMessageRequest";
        };

        return sendUserMessageRequest;
    })();

    web_proto.sendUserMessageResponse = (function() {

        /**
         * Properties of a sendUserMessageResponse.
         * @memberof web_proto
         * @interface IsendUserMessageResponse
         */

        /**
         * Constructs a new sendUserMessageResponse.
         * @memberof web_proto
         * @classdesc Represents a sendUserMessageResponse.
         * @implements IsendUserMessageResponse
         * @constructor
         * @param {web_proto.IsendUserMessageResponse=} [properties] Properties to set
         */
        function sendUserMessageResponse(properties) {
            if (properties)
                for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * Creates a new sendUserMessageResponse instance using the specified properties.
         * @function create
         * @memberof web_proto.sendUserMessageResponse
         * @static
         * @param {web_proto.IsendUserMessageResponse=} [properties] Properties to set
         * @returns {web_proto.sendUserMessageResponse} sendUserMessageResponse instance
         */
        sendUserMessageResponse.create = function create(properties) {
            return new sendUserMessageResponse(properties);
        };

        /**
         * Encodes the specified sendUserMessageResponse message. Does not implicitly {@link web_proto.sendUserMessageResponse.verify|verify} messages.
         * @function encode
         * @memberof web_proto.sendUserMessageResponse
         * @static
         * @param {web_proto.IsendUserMessageResponse} message sendUserMessageResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        sendUserMessageResponse.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            return writer;
        };

        /**
         * Encodes the specified sendUserMessageResponse message, length delimited. Does not implicitly {@link web_proto.sendUserMessageResponse.verify|verify} messages.
         * @function encodeDelimited
         * @memberof web_proto.sendUserMessageResponse
         * @static
         * @param {web_proto.IsendUserMessageResponse} message sendUserMessageResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        sendUserMessageResponse.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a sendUserMessageResponse message from the specified reader or buffer.
         * @function decode
         * @memberof web_proto.sendUserMessageResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {web_proto.sendUserMessageResponse} sendUserMessageResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        sendUserMessageResponse.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            let end = length === undefined ? reader.len : reader.pos + length, message = new $root.web_proto.sendUserMessageResponse();
            while (reader.pos < end) {
                let tag = reader.uint32();
                switch (tag >>> 3) {
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a sendUserMessageResponse message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof web_proto.sendUserMessageResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {web_proto.sendUserMessageResponse} sendUserMessageResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        sendUserMessageResponse.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a sendUserMessageResponse message.
         * @function verify
         * @memberof web_proto.sendUserMessageResponse
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        sendUserMessageResponse.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            return null;
        };

        /**
         * Creates a sendUserMessageResponse message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof web_proto.sendUserMessageResponse
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {web_proto.sendUserMessageResponse} sendUserMessageResponse
         */
        sendUserMessageResponse.fromObject = function fromObject(object) {
            if (object instanceof $root.web_proto.sendUserMessageResponse)
                return object;
            return new $root.web_proto.sendUserMessageResponse();
        };

        /**
         * Creates a plain object from a sendUserMessageResponse message. Also converts values to other types if specified.
         * @function toObject
         * @memberof web_proto.sendUserMessageResponse
         * @static
         * @param {web_proto.sendUserMessageResponse} message sendUserMessageResponse
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        sendUserMessageResponse.toObject = function toObject() {
            return {};
        };

        /**
         * Converts this sendUserMessageResponse to JSON.
         * @function toJSON
         * @memberof web_proto.sendUserMessageResponse
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        sendUserMessageResponse.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for sendUserMessageResponse
         * @function getTypeUrl
         * @memberof web_proto.sendUserMessageResponse
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        sendUserMessageResponse.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/web_proto.sendUserMessageResponse";
        };

        return sendUserMessageResponse;
    })();

    web_proto.kickOfflineRequest = (function() {

        /**
         * Properties of a kickOfflineRequest.
         * @memberof web_proto
         * @interface IkickOfflineRequest
         * @property {number|Long|null} [UserID] kickOfflineRequest UserID
         */

        /**
         * Constructs a new kickOfflineRequest.
         * @memberof web_proto
         * @classdesc Represents a kickOfflineRequest.
         * @implements IkickOfflineRequest
         * @constructor
         * @param {web_proto.IkickOfflineRequest=} [properties] Properties to set
         */
        function kickOfflineRequest(properties) {
            if (properties)
                for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * kickOfflineRequest UserID.
         * @member {number|Long} UserID
         * @memberof web_proto.kickOfflineRequest
         * @instance
         */
        kickOfflineRequest.prototype.UserID = $util.Long ? $util.Long.fromBits(0,0,false) : 0;

        /**
         * Creates a new kickOfflineRequest instance using the specified properties.
         * @function create
         * @memberof web_proto.kickOfflineRequest
         * @static
         * @param {web_proto.IkickOfflineRequest=} [properties] Properties to set
         * @returns {web_proto.kickOfflineRequest} kickOfflineRequest instance
         */
        kickOfflineRequest.create = function create(properties) {
            return new kickOfflineRequest(properties);
        };

        /**
         * Encodes the specified kickOfflineRequest message. Does not implicitly {@link web_proto.kickOfflineRequest.verify|verify} messages.
         * @function encode
         * @memberof web_proto.kickOfflineRequest
         * @static
         * @param {web_proto.IkickOfflineRequest} message kickOfflineRequest message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        kickOfflineRequest.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.UserID != null && Object.hasOwnProperty.call(message, "UserID"))
                writer.uint32(/* id 1, wireType 0 =*/8).int64(message.UserID);
            return writer;
        };

        /**
         * Encodes the specified kickOfflineRequest message, length delimited. Does not implicitly {@link web_proto.kickOfflineRequest.verify|verify} messages.
         * @function encodeDelimited
         * @memberof web_proto.kickOfflineRequest
         * @static
         * @param {web_proto.IkickOfflineRequest} message kickOfflineRequest message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        kickOfflineRequest.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a kickOfflineRequest message from the specified reader or buffer.
         * @function decode
         * @memberof web_proto.kickOfflineRequest
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {web_proto.kickOfflineRequest} kickOfflineRequest
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        kickOfflineRequest.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            let end = length === undefined ? reader.len : reader.pos + length, message = new $root.web_proto.kickOfflineRequest();
            while (reader.pos < end) {
                let tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.UserID = reader.int64();
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a kickOfflineRequest message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof web_proto.kickOfflineRequest
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {web_proto.kickOfflineRequest} kickOfflineRequest
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        kickOfflineRequest.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a kickOfflineRequest message.
         * @function verify
         * @memberof web_proto.kickOfflineRequest
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        kickOfflineRequest.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.UserID != null && message.hasOwnProperty("UserID"))
                if (!$util.isInteger(message.UserID) && !(message.UserID && $util.isInteger(message.UserID.low) && $util.isInteger(message.UserID.high)))
                    return "UserID: integer|Long expected";
            return null;
        };

        /**
         * Creates a kickOfflineRequest message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof web_proto.kickOfflineRequest
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {web_proto.kickOfflineRequest} kickOfflineRequest
         */
        kickOfflineRequest.fromObject = function fromObject(object) {
            if (object instanceof $root.web_proto.kickOfflineRequest)
                return object;
            let message = new $root.web_proto.kickOfflineRequest();
            if (object.UserID != null)
                if ($util.Long)
                    (message.UserID = $util.Long.fromValue(object.UserID)).unsigned = false;
                else if (typeof object.UserID === "string")
                    message.UserID = parseInt(object.UserID, 10);
                else if (typeof object.UserID === "number")
                    message.UserID = object.UserID;
                else if (typeof object.UserID === "object")
                    message.UserID = new $util.LongBits(object.UserID.low >>> 0, object.UserID.high >>> 0).toNumber();
            return message;
        };

        /**
         * Creates a plain object from a kickOfflineRequest message. Also converts values to other types if specified.
         * @function toObject
         * @memberof web_proto.kickOfflineRequest
         * @static
         * @param {web_proto.kickOfflineRequest} message kickOfflineRequest
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        kickOfflineRequest.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            let object = {};
            if (options.defaults)
                if ($util.Long) {
                    let long = new $util.Long(0, 0, false);
                    object.UserID = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.UserID = options.longs === String ? "0" : 0;
            if (message.UserID != null && message.hasOwnProperty("UserID"))
                if (typeof message.UserID === "number")
                    object.UserID = options.longs === String ? String(message.UserID) : message.UserID;
                else
                    object.UserID = options.longs === String ? $util.Long.prototype.toString.call(message.UserID) : options.longs === Number ? new $util.LongBits(message.UserID.low >>> 0, message.UserID.high >>> 0).toNumber() : message.UserID;
            return object;
        };

        /**
         * Converts this kickOfflineRequest to JSON.
         * @function toJSON
         * @memberof web_proto.kickOfflineRequest
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        kickOfflineRequest.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for kickOfflineRequest
         * @function getTypeUrl
         * @memberof web_proto.kickOfflineRequest
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        kickOfflineRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/web_proto.kickOfflineRequest";
        };

        return kickOfflineRequest;
    })();

    web_proto.kickOfflineResponse = (function() {

        /**
         * Properties of a kickOfflineResponse.
         * @memberof web_proto
         * @interface IkickOfflineResponse
         * @property {number|Long|null} [code] kickOfflineResponse code
         * @property {string|null} [msg] kickOfflineResponse msg
         */

        /**
         * Constructs a new kickOfflineResponse.
         * @memberof web_proto
         * @classdesc Represents a kickOfflineResponse.
         * @implements IkickOfflineResponse
         * @constructor
         * @param {web_proto.IkickOfflineResponse=} [properties] Properties to set
         */
        function kickOfflineResponse(properties) {
            if (properties)
                for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * kickOfflineResponse code.
         * @member {number|Long} code
         * @memberof web_proto.kickOfflineResponse
         * @instance
         */
        kickOfflineResponse.prototype.code = $util.Long ? $util.Long.fromBits(0,0,false) : 0;

        /**
         * kickOfflineResponse msg.
         * @member {string} msg
         * @memberof web_proto.kickOfflineResponse
         * @instance
         */
        kickOfflineResponse.prototype.msg = "";

        /**
         * Creates a new kickOfflineResponse instance using the specified properties.
         * @function create
         * @memberof web_proto.kickOfflineResponse
         * @static
         * @param {web_proto.IkickOfflineResponse=} [properties] Properties to set
         * @returns {web_proto.kickOfflineResponse} kickOfflineResponse instance
         */
        kickOfflineResponse.create = function create(properties) {
            return new kickOfflineResponse(properties);
        };

        /**
         * Encodes the specified kickOfflineResponse message. Does not implicitly {@link web_proto.kickOfflineResponse.verify|verify} messages.
         * @function encode
         * @memberof web_proto.kickOfflineResponse
         * @static
         * @param {web_proto.IkickOfflineResponse} message kickOfflineResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        kickOfflineResponse.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.code != null && Object.hasOwnProperty.call(message, "code"))
                writer.uint32(/* id 1, wireType 0 =*/8).int64(message.code);
            if (message.msg != null && Object.hasOwnProperty.call(message, "msg"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.msg);
            return writer;
        };

        /**
         * Encodes the specified kickOfflineResponse message, length delimited. Does not implicitly {@link web_proto.kickOfflineResponse.verify|verify} messages.
         * @function encodeDelimited
         * @memberof web_proto.kickOfflineResponse
         * @static
         * @param {web_proto.IkickOfflineResponse} message kickOfflineResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        kickOfflineResponse.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a kickOfflineResponse message from the specified reader or buffer.
         * @function decode
         * @memberof web_proto.kickOfflineResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {web_proto.kickOfflineResponse} kickOfflineResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        kickOfflineResponse.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            let end = length === undefined ? reader.len : reader.pos + length, message = new $root.web_proto.kickOfflineResponse();
            while (reader.pos < end) {
                let tag = reader.uint32();
                switch (tag >>> 3) {
                case 1: {
                        message.code = reader.int64();
                        break;
                    }
                case 2: {
                        message.msg = reader.string();
                        break;
                    }
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a kickOfflineResponse message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof web_proto.kickOfflineResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {web_proto.kickOfflineResponse} kickOfflineResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        kickOfflineResponse.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a kickOfflineResponse message.
         * @function verify
         * @memberof web_proto.kickOfflineResponse
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        kickOfflineResponse.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.code != null && message.hasOwnProperty("code"))
                if (!$util.isInteger(message.code) && !(message.code && $util.isInteger(message.code.low) && $util.isInteger(message.code.high)))
                    return "code: integer|Long expected";
            if (message.msg != null && message.hasOwnProperty("msg"))
                if (!$util.isString(message.msg))
                    return "msg: string expected";
            return null;
        };

        /**
         * Creates a kickOfflineResponse message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof web_proto.kickOfflineResponse
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {web_proto.kickOfflineResponse} kickOfflineResponse
         */
        kickOfflineResponse.fromObject = function fromObject(object) {
            if (object instanceof $root.web_proto.kickOfflineResponse)
                return object;
            let message = new $root.web_proto.kickOfflineResponse();
            if (object.code != null)
                if ($util.Long)
                    (message.code = $util.Long.fromValue(object.code)).unsigned = false;
                else if (typeof object.code === "string")
                    message.code = parseInt(object.code, 10);
                else if (typeof object.code === "number")
                    message.code = object.code;
                else if (typeof object.code === "object")
                    message.code = new $util.LongBits(object.code.low >>> 0, object.code.high >>> 0).toNumber();
            if (object.msg != null)
                message.msg = String(object.msg);
            return message;
        };

        /**
         * Creates a plain object from a kickOfflineResponse message. Also converts values to other types if specified.
         * @function toObject
         * @memberof web_proto.kickOfflineResponse
         * @static
         * @param {web_proto.kickOfflineResponse} message kickOfflineResponse
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        kickOfflineResponse.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            let object = {};
            if (options.defaults) {
                if ($util.Long) {
                    let long = new $util.Long(0, 0, false);
                    object.code = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.code = options.longs === String ? "0" : 0;
                object.msg = "";
            }
            if (message.code != null && message.hasOwnProperty("code"))
                if (typeof message.code === "number")
                    object.code = options.longs === String ? String(message.code) : message.code;
                else
                    object.code = options.longs === String ? $util.Long.prototype.toString.call(message.code) : options.longs === Number ? new $util.LongBits(message.code.low >>> 0, message.code.high >>> 0).toNumber() : message.code;
            if (message.msg != null && message.hasOwnProperty("msg"))
                object.msg = message.msg;
            return object;
        };

        /**
         * Converts this kickOfflineResponse to JSON.
         * @function toJSON
         * @memberof web_proto.kickOfflineResponse
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        kickOfflineResponse.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for kickOfflineResponse
         * @function getTypeUrl
         * @memberof web_proto.kickOfflineResponse
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        kickOfflineResponse.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/web_proto.kickOfflineResponse";
        };

        return kickOfflineResponse;
    })();

    web_proto.WsService = (function() {

        /**
         * Constructs a new WsService service.
         * @memberof web_proto
         * @classdesc Represents a WsService
         * @extends $protobuf.rpc.Service
         * @constructor
         * @param {$protobuf.RPCImpl} rpcImpl RPC implementation
         * @param {boolean} [requestDelimited=false] Whether requests are length-delimited
         * @param {boolean} [responseDelimited=false] Whether responses are length-delimited
         */
        function WsService(rpcImpl, requestDelimited, responseDelimited) {
            $protobuf.rpc.Service.call(this, rpcImpl, requestDelimited, responseDelimited);
        }

        (WsService.prototype = Object.create($protobuf.rpc.Service.prototype)).constructor = WsService;

        /**
         * Creates new WsService service using the specified rpc implementation.
         * @function create
         * @memberof web_proto.WsService
         * @static
         * @param {$protobuf.RPCImpl} rpcImpl RPC implementation
         * @param {boolean} [requestDelimited=false] Whether requests are length-delimited
         * @param {boolean} [responseDelimited=false] Whether responses are length-delimited
         * @returns {WsService} RPC service. Useful where requests and/or responses are streamed.
         */
        WsService.create = function create(rpcImpl, requestDelimited, responseDelimited) {
            return new this(rpcImpl, requestDelimited, responseDelimited);
        };

        /**
         * Callback as used by {@link web_proto.WsService#sendUserMessage}.
         * @memberof web_proto.WsService
         * @typedef sendUserMessageCallback
         * @type {function}
         * @param {Error|null} error Error, if any
         * @param {web_proto.sendUserMessageResponse} [response] sendUserMessageResponse
         */

        /**
         * Calls sendUserMessage.
         * @function sendUserMessage
         * @memberof web_proto.WsService
         * @instance
         * @param {web_proto.IsendUserMessageRequest} request sendUserMessageRequest message or plain object
         * @param {web_proto.WsService.sendUserMessageCallback} callback Node-style callback called with the error, if any, and sendUserMessageResponse
         * @returns {undefined}
         * @variation 1
         */
        Object.defineProperty(WsService.prototype.sendUserMessage = function sendUserMessage(request, callback) {
            return this.rpcCall(sendUserMessage, $root.web_proto.sendUserMessageRequest, $root.web_proto.sendUserMessageResponse, request, callback);
        }, "name", { value: "sendUserMessage" });

        /**
         * Calls sendUserMessage.
         * @function sendUserMessage
         * @memberof web_proto.WsService
         * @instance
         * @param {web_proto.IsendUserMessageRequest} request sendUserMessageRequest message or plain object
         * @returns {Promise<web_proto.sendUserMessageResponse>} Promise
         * @variation 2
         */

        /**
         * Callback as used by {@link web_proto.WsService#kickOffline}.
         * @memberof web_proto.WsService
         * @typedef kickOfflineCallback
         * @type {function}
         * @param {Error|null} error Error, if any
         * @param {web_proto.kickOfflineResponse} [response] kickOfflineResponse
         */

        /**
         * Calls kickOffline.
         * @function kickOffline
         * @memberof web_proto.WsService
         * @instance
         * @param {web_proto.IkickOfflineRequest} request kickOfflineRequest message or plain object
         * @param {web_proto.WsService.kickOfflineCallback} callback Node-style callback called with the error, if any, and kickOfflineResponse
         * @returns {undefined}
         * @variation 1
         */
        Object.defineProperty(WsService.prototype.kickOffline = function kickOffline(request, callback) {
            return this.rpcCall(kickOffline, $root.web_proto.kickOfflineRequest, $root.web_proto.kickOfflineResponse, request, callback);
        }, "name", { value: "kickOffline" });

        /**
         * Calls kickOffline.
         * @function kickOffline
         * @memberof web_proto.WsService
         * @instance
         * @param {web_proto.IkickOfflineRequest} request kickOfflineRequest message or plain object
         * @returns {Promise<web_proto.kickOfflineResponse>} Promise
         * @variation 2
         */

        return WsService;
    })();

    return web_proto;
})();

export { $root as default };
